محمدرضا کیانی
4 سال پیش توسط محمدرضا کیانی مطرح شد
12 پاسخ

مشکل در Polymorphic Relation

سلام خسته نباشید.
ارور:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_category_id' in 'field list' (SQL: select `category_category_id` from `categorizables` where `categorizable_id` = 25 and `categorizable_type` = App\Package)

مدل پکیج:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
    protected $primaryKey = 'category_id';
    public $timestamps = false;

    protected  $fillable = ['category_name'];

    public function Package()
    {
        return $this->morphedByMany(Package::class, 'categorizable');
    }
}

مدل دسته بندی:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Package extends Model
{
    protected $table = 'packages';
    protected $primaryKey = 'package_id';
    protected $guarded = 'package_id';
    protected $fillable = ['package_title', 'package_price'];

    public function File()
    {
        return $this->belongsToMany(File::class, 'file_package', 'package_id', 'file_id');
    }

    public function Package()
    {
        return $this->belongsToMany(User::class, 'user_packages', 'package_id', 'user_id')->withPivot(['amount', 'created_at']);
    }

    public function Categories()
    {
        return $this->morphToMany(Category::class, 'categorizable');
    }
}

کنترولر پکیج:

public function store(Request $request)
    {
        $this->validate($request, [
            'package_title' => 'required',
            'package_price' => 'required'
        ]);

        $NewPackage = Package::create([
            'package_title' => $request->input('package_title'),
            'package_price' => $request->input('package_price')
        ]);

        if ($request->has('categories')) {
            $NewPackage->Categories()->sync($request->input('categories'));
        }

        if ($NewPackage) {
            return redirect()->route('admin.package.list')->with('success', 'با موفقیت اضافه شد');
        }
    }

دیتابیس:

categories { category_id,category_name}
categorizables {category_id,categorizable_id,categorizable_type}

@hesammousavi
@ali.bayat


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
1

در جای که morphToMany رو تعریف میکنید فیلد ها رو هم بگید کدوم به کدومه
چون اصولا در categories باید id باشه نه category_id این بد بختم (لاراول) متوجه نمیشه پس باید بهش بفهمونید در اون متد


محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
0

@hesammousavi
خوب درسته بهش گفتم کدوم به کدومه بازم هیچ فرقی نکرد


محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
0

@hesammousavi
میشه نمونه نشونم بدید؟!


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
1

@mrkiani.dev
بله تغییری که نمایش دادید رو بفرستید
ارورتون رو هم ببینید نشون دهنده این هست که مشکلتون مربوط به پیاده سازی روابط هست
البته من پیشنهاد میکنم در جدول categories بجای قرار دادن category_id و category_name
فقط قرار بدیم id و name
چه کاریه واقعا


محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
0

من فیلد های جدول categories رو به id و name تغیر دادم

Category Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
    protected $primaryKey = 'id';
    public $timestamps = false;

    protected  $fillable = ['name'];

    public function Package()
    {
        return $this->morphedByMany(Package::class, 'categorizable_type', 'categorizables' , 'categorizable_id' , 'category_id');
    }
}

Package Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Package extends Model
{
    protected $table = 'packages';
    protected $primaryKey = 'package_id';
    protected $guarded = 'package_id';
    protected $fillable = ['package_title', 'package_price'];

    public function File()
    {
        return $this->belongsToMany(File::class, 'file_package', 'package_id', 'file_id');
    }

    public function Package()
    {
        return $this->belongsToMany(User::class, 'user_packages', 'package_id', 'user_id')->withPivot(['amount', 'created_at']);
    }

    public function Categories()
    {
        return $this->morphToMany(Category::class, 'category_id' , 'categorizables' , 'category_id' , 'categorizable_id');
    }
}

من درست این Polymorphic relationships درک نکردم بخاطر همینه که اشتباه می کنم


محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
0

متن ارور

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'category_id_type' in 'where clause' (SQL: select `categorizable_id` from `categorizables` where `category_id` = 32 and `category_id_type` = App\Package)

محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
0

فهمیدم مشکل کجاست

درست شد


محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش مطرح شد
0

@hesammousavi

Category Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
    protected $primaryKey = 'id';
    public $timestamps = false;

    protected  $fillable = ['name'];

    public function Package()
    {
        return $this->morphedByMany(Package::class, 'categorizable', 'categorizables' , 'categorizable_id' , 'category_id');
    }
}

Package Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Package extends Model
{
    protected $table = 'packages';
    protected $primaryKey = 'package_id';
    protected $guarded = 'package_id';
    protected $fillable = ['package_title', 'package_price'];

    public function File()
    {
        return $this->belongsToMany(File::class, 'file_package', 'package_id', 'file_id');
    }

    public function Package()
    {
        return $this->belongsToMany(User::class, 'user_packages', 'package_id', 'user_id')->withPivot(['amount', 'created_at']);
    }

    public function Categories()
    {
        return $this->morphToMany(Category::class, 'categorizable' , 'categorizables' , 'category_id' , 'categorizable_id');
    }
}

اینا گذاشتم که بدونند مشکل از کجا بوده ، ممنون بابت راهنمایی تون


حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 4 سال پیش مطرح شد
0

با این حال عمیقا پیشنهاد میکنم در کدی که نوشتید بازنگری کنید دیگه داخل جدول packages نیاید فیلد package_id قرار بدید همون اسم id بهترین حالته
نیاید داخل جدول categories فیلد category_id بزارید همون id درست‌تره.
اینکه شم ااینا رو تغییر میدید فقط باعث کثیف شدن کدهاتون میشه
البته از ما گفتن بود


محمدرضا کیانی
تخصص : توسعه دهنده وب و موبایل
@MoReKiani 4 سال پیش آپدیت شد
0

@hesammousavi
تجربه شما از تجربه من خیلی بیشتره و حتما از نکات شما استفاده میکنم :) ممنون


سانبوی
@royalkingsiminof 4 سال پیش آپدیت شد
0

سلام .

من یه خطا توی بخش پلی مورفیک ریلیشن شیپ دارم


Route::get('user/photo',function(){  
$user = \\App\\User::find(1);  
foreach ($user-&gt;photos as $photo){  
echo $photo-&gt;path;  
echo "&lt;/br&gt;";  
}  
});

Invalid argument supplied for foreach()

دستور فور ایچ کار نمیکنه

همه جارم بررسی کردم. مشکل از Foreach هستش


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام