راکت

ارتباط جداول برای wishlist

2 پاسخ

من یه جدول wishlist دارم با ساختار زیر

            $table->id();
            $table->unsignedBigInteger('product_id');
            $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->timestamps();

این مدل wishlist

class Wishlist extends Model
{
    protected $fillable = [
        'product_id',
        'user_id',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function product()
    {
        return $this->hasMany(Product::class);
    }
}

میخوام با این کد محصولات مورد علاقه هر کاربر رو بگیرم ولی به ارور میخورم

auth()->user()->wishlist()->products;
ErrorException
Undefined property: Illuminate\Database\Eloquent\Relations\HasMany::$product
https://ansolin.com/profile/wishlist
ثبت پرسش جدید

پاسخ‌ها

2
Ali
Ali
@411proplayer

باید ریلیشن شیب چند به چند درست کنید چون هر یوزر ممکنه چنتا محصول داشته باشه و هر محصول ممکنه چنتا یوزر اونا نتخاب کرده باشن تو ویش لیست
User Model

public function wishlist() {
    return $this->belongsToMany(Product::class,'wishlist');
}

Product Model

public function usersWhoLikedThisProduct() {
    return $this->belongsToMany(User::class,'wishlist');
}
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام.
اولین نکته ای که باید بهش توجه کنید، درک درست از روابط هست.
هر محصول میتونه توسط چند کاربر انتخاب بشه و هر کاربر میتونه چند محوصل رو انتخاب کنه، پس رابطه شما میشه چند به چند.
حالا باید در مدل های خود روابط رو به صورت زیر بنویسید.
مدل Product:

public function users() {
    return $this->belongsToMany(User::class);
}

مدل User:

public function wishlists() {
    return $this->belongsToMany(Product::class);
}

موفق باشید.

شاید پاسخ شما همین‌جا باشد

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

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