راکت
حل شده

دخیره داده در رابطه many to many

6 پاسخ

سلام
در رابطه many to many لاراول باید یک جدول رابط مین دو مدل ایجاد و از اون به عنوان ایجاد رابطه استفاده کنیم
حالا فرض کنید در اون جدول رابط به جز id دو مدل مرتبط بخوایم یه سری داده از دو مدل هم در هر رکورد ذخیره بشه
سوال اینجاست که چطور به بهینه ترین حالت پیاده سازیش کنم ؟
آیا در پیش فرض لاراول چنین چیزی هست ؟

ثبت پرسش جدید

پاسخ‌ها

6
علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

بهترین پاسخ

لاراول خودش همچین حالتی رو پشتیبانی میکنه

در رابطه های چند به چند اگر بخواهی فیلد اضافه ای رو ذخیره کنی باید در حین تعریف رابطه اون فیلد ها رو مشخص کنی
برای این کار میتونی از متد withPivot استفاده کنی و لیستی از فیلدها رو بهش پاس میدی

return $this->belongsToMany('App\Model')->withPivot('column1', 'column2');

در حین استفاده از متد attach هم باید آرایه ای از اطلاعات رو پاس بدی

$user->relation()->attach($roleId, ['column1' => $column1, 'column2' => $column2]);
مهدی
مهدی
@mahdiam200

تخصص: برنامه نویس

با سلام.بله این مورد در لاراول وجود دارد و در لینک زیر به صورت کامل آموزش داده شده است.

لینک

احمد
احمد
@ahmad316948

@ali.bayat
سلام. در متد sync باید به چه شکل عمل کنیم؟ من یک سری دیتا میخام در جدول color_product ذخیره کنم. با متد attach همه اون دیتا ها اضافه میشه ولی در متد sync خیر .

 $product->colors()->attach($data['colors'] ,['pricecolor'=>$request ->pricecolor , 'inventory'=>$request ->inventory]);  // در متد اینجا اطلاعات به طور کامل در جدول واسط ثبت میشه اما در متد سینک خیر

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

@ahmad316948
متد sync داده های قبلی رو پاک و داده های جدید رو جایگزین میکنه

احمد
احمد
@ahmad316948

@ali.bayat
سلام کار متد sync رو میدونم. فکر می کنم سوال منو درست متوجه نشدید. من منظورم این هست که اون دیتا هایی که میخام تو جدول واسط colo_product ذخیره کنم در متد sync این اطلاعات ذخیره نمیشه ولی همین دیتا ها در متد attach به درستی ذخیره میشه. الان چجوری این اطلاعات رو توسط متد sync ذخیره کنم؟

alireza M
alireza M
@alireza.mahjoor

سلام.
شما باید از دستور syncWithPivotValues استفاده کنی.
$user->role()->syncWithPivotValues($role, ['name' => 'sth'])

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

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