TGViewer
| کانال توسعه‌دهندگان لاراول | | کانال توسعه‌دهندگان لاراول | @developixlaravel · 1.54K subscribers
Post #105 561
فصل چهار - مدل‌ها و Eloquent ORM

بخش سوم - روابط - قسمت چهارم

1- متد attach
برای افزودن رکوردهای جدید به جدول واسط (pivot table) استفاده می‌شود. با این متد می‌توانید رابطه‌های جدیدی را بین مدل اصلی و مدل مرتبط ایجاد کنید.
$user = User::find(1);
$user->roles()->attach([1, 2]);

نقش‌های 1 و 2 به کاربر شماره 1 اختصاص داده می‌شوند و این رابطه‌ها در جدول واسط (role_user) اضافه می‌شوند.

همچنین می‌توانید داده‌های اضافی به جدول واسط نیز اضافه کنید:
$user->roles()->attach(1, ['assigned_at' => now()]);


2- متد detach
برای حذف رابطه‌های موجود در جدول واسط استفاده می‌شود. این متد می‌تواند رابطه‌های مرتبط با مدل فعلی را از مدل‌های دیگر حذف کند.
$user = User::find(1);
$user->roles()->detach(2);

نقش شماره 2 از کاربر شماره 1 حذف می‌شود.

3- متد sync
برای همگام‌سازی روابط استفاده می‌شود. این متد رابطه‌های فعلی را با رابطه‌های جدید جایگزین می‌کند:

- اگر شناسه‌ای در لیست وجود داشته باشد که قبلاً با مدل مرتبط نبوده، آن شناسه اضافه می‌شود.

- اگر شناسه‌ای در لیست نباشد، و قبلاً مرتبط بوده، آن شناسه حذف می‌شود.

- شناسه‌هایی که هم اکنون با مدل مرتبط هستند و در لیست جدید نیز وجود دارند، دست نخورده باقی می‌مانند.
$user = User::find(1);
$user->roles()->sync([1, 3]);

بسته به شرایط توضیح داده شده روابط از جدول واسط، حذف/اضافه یا ویرایش می شوند.

این متد آرایه‌ای از رکوردهای attached, detached, و updated را برمی‌گرداند، که گزارشی از تغییرات روی روابط است.

4- متد syncWithPivotValues
مشابه sync عمل می‌کند، اما به شما امکان می‌دهد داده‌های اضافی را در جدول واسط تنظیم کنید. هر بار که رابطه همگام‌سازی می‌شود، می‌توانید مقادیر داده‌های اضافی را نیز ارائه دهید.
$user = User::find(1);
$user->roles()->syncWithPivotValues([1, 2], ['assigned_at' => now()]);

نقش‌های 1 و 2 همگام‌سازی می‌شوند و ستون assigned_at برای هر رابطه به زمان فعلی تنظیم می‌شود.

5- متد syncWithoutDetaching
همانند sync عمل می‌کند، با این تفاوت که رابطه‌های فعلی را حذف نمی‌کند و فقط رکوردهای جدید را اضافه می‌کند.

6- متد toggle
نقش‌ها را اضافه می‌کند اگر وجود نداشته باشند و حذف می‌کند اگر وجود داشته باشند. به عبارتی دیگر، نقش‌ها را روشن و خاموش می‌کند.
$user = User::find(1);
$user->roles()->toggle([1, 2]);


7- متد updateExistingPivot
برای به‌روزرسانی داده‌های جدول واسط برای یک رابطه موجود استفاده می‌شود. این متد رکوردهای مرتبط را در جدول واسط به‌روزرسانی می‌کند.
$user = User::find(1);
$user->roles()->updateExistingPivot(1, ['assigned_at' => now()]);

مقدار assigned_at برای نقش شماره 1 به روز شده است.

8- متد push
تمام تغییرات انجام‌شده روی مدل فعلی و مدل‌های مرتبط آن را به پایگاه داده ذخیره می‌کند. این متد به شما امکان می‌دهد چندین تغییر را به طور همزمان ذخیره کنید.
$user = User::find(1);
$user->name = "John Updated";
$user->roles[0]->name = "Admin Updated";
$user->push();

هم تغییرات اعمال‌شده روی مدل اصلی (user) و هم تغییرات مربوط به مدل‌های مرتبط (roles) ذخیره می‌شوند.

9- متد pushQuietly
مشابه push است، اما بدون اجرای رویدادهای مربوطه، مدل را ذخیره می‌کند.

نکته: دو متد بعدی مربوط به روابط One-to-Many و Many-to-One می باشند.

10- متد associate
برای برقراری ارتباط بین یک رکورد فرزند و یک رکورد والد استفاده می‌شود. با associate، کلید خارجی در مدل فرزند تنظیم می‌شود تا به رکورد والد مرتبط شود.
$post = Post::find(1); 
$user = User::find(1);

$post->user()->associate($user);
$post->save();

با استفاده از associate، کلید خارجی user_id در جدول posts به شناسه کاربر تنظیم می‌شود.

11- متد dissociate
برای قطع ارتباط بین یک رکورد فرزند و رکورد والد استفاده می‌شود. این متد کلید خارجی در مدل فرزند را حذف (null) می‌کند و رابطه را از بین می‌برد.
$post = Post::find(1); 

$post->user()->dissociate();
$post->save()

با استفاده از dissociate، کلید خارجی user_id در جدول posts به مقدار null تنظیم می‌شود.

از قسمت بعد به سایر روابط می پردازیم.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
  • ❤ 4
  • 👍 3
More from @developixlaravel
  1. Oct 1, 2026روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول در لاراول، روابط…
  2. Sep 30, 2026مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks) در بخش چهارم از…
  3. Sep 26, 2026🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه ل…
  4. Sep 25, 2026🔒 فقط داده‌های تأییدشده را ذخیره کن وقتی یک فرم ویرایش پروفایل داری، ممکن است کلاینت علاو…
  5. Sep 20, 2026حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی در قسمت سوم از مجموعه آموزش…
  6. Sep 16, 2026🚀 ‏LaraGram Brain منتشر شد! از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraG…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →