تفاوت attach و sync در لاراول

محمد عسکری
منتشر شده در ۳ ماه پیش | خواندن در ۲ دقیقه

زمانی که ما یک رابطه Many to Many تعریف میکنیم، یک جدول Pivot نیاز داریم که روابط بین دو مدل را تشریح کند، در این جا میخواییم تفاوت بین Sync و Attach رو توی تعریف این روابط بررسی کنیم و تفاوت اونها رو بنویسیم

متد attach رکورد مرتبط با یک رابطه Many to Many رو اضافه میکنه و نیازی به ارسال آرایه به اون نیست. به عنوان مثال

$user = User::find(1);
$user->roles()->attach(1);

حالا با توجه به نحوه کارکرد متد Attach ما همینکار رو با متد sync هم میتونیم انجام بدیم با این تفاوت که متد syncیک آرایه از Id های مرتبط رو دریافت میکنه و اون رو با جدول pivot بررسی می کنه. اگر اون شناسه توی جدول نبود، اون رو اضافه میکنه، و اگر شناسه ای تو جدول بود که توی آرایه ارسالی نبود، اون رو پاک میکنه . به عنوان مثال جدول زیر رو ببینید

id  user_id role_id
1 2 1
2 2 5
3 2 2

حالا کد زیر رو اجرا می کنیم

$user->roles()->sync(array(1, 2, 3));

این کد رکورد زیر رو پاک میکنه

id  user_id role_id
2 2 5

و شناسه ۳ رو اضافه میکنه و در نهایت جدولی معادل جدول زیر خواهیم داشت

id  user_id role_id
1 2 1
3 2 2
4 2 3

اگر سوالی داشتید زیر همین پست بنویسید


محمد عسکری

نظرات