راکت
حل
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


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

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


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

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


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

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


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

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


محمدرضا کیانی
محمدرضا کیانی
تخصص :توسعه دهنده وب و موبایل
@MoReKiani6 سال پیشمطرح شد
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 درک نکردم بخاطر همینه که اشتباه می کنم


محمدرضا کیانی
محمدرضا کیانی
تخصص :توسعه دهنده وب و موبایل
@MoReKiani6 سال پیشمطرح شد
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)

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

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

درست شد


محمدرضا کیانی
محمدرضا کیانی
تخصص :توسعه دهنده وب و موبایل
@MoReKiani6 سال پیشمطرح شد
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');
    }
}

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


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

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


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

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


سانبوی
سانبوی
@royalkingsiminof5 سال پیشمطرح شد
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 هستش


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

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