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

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

رابطه Many-to-Many (چند به چند)

رابطه چند به چند (Many-to-Many) یکی از روابط رایج در سیستم‌های دیتابیس است که در آن چند رکورد از یک جدول می‌تواند با چندین رکورد از جدول دیگر مرتبط باشد، و برعکس. برای پیاده‌سازی این نوع رابطه، از یک جدول واسط (pivot table) استفاده می‌شود که شناسه‌های هر دو جدول را نگه می‌دارد و این ارتباط را برقرار می‌کند.

مثال:

- یک کاربر می‌تواند چندین نقش داشته باشد و یک نقش می‌تواند به چندین کاربر اختصاص داده شود.
- یک دانشجو می‌تواند در چندین کلاس شرکت کند و یک کلاس می‌تواند چندین دانشجو داشته باشد.
- یک محصول می‌تواند در چندین دسته‌بندی قرار بگیرد و هر دسته‌بندی می‌تواند شامل چندین محصول باشد.

1- ساختار جداول:

برای پیاده‌سازی رابطه چند به چند، شما به سه جدول نیاز دارید:

مثال:

1- جدول اصلی (users): اطلاعات کاربران را نگه می‌دارد.
2- جدول ثانویه (roles): اطلاعات نقش‌ها را نگه می‌دارد.
3- جدول واسط (pivot table - role_user): جدول واسط، شناسه‌های کاربران و نقش‌ها را نگه می‌دارد و رابطه چند به چند را برقرار می‌کند.

جداول اصلی و ثانویه، هر کدام دارای یک فیلد id به عنوان primary key هستند.

جدول واسط دارای دو فیلد foreign key برای جداول اصلی و ثانویه هستند. این فیلد ها به صورت پیشفرض باید با نام های جداول اصلی با پسوند _id باشند.
در مثال ما role_id و user_id هستند.
همچنین نام جدول واسط باید ترکیب مفرد جداول اصلی و واسط باشد. در مثال ما role_user می باشد.

2- ایجاد مدل‌ها:

مدل User نشان‌دهنده جدول users است و رابطه چند به چند با مدل Role دارد. این رابطه با استفاده از متد belongsToMany تعریف می‌شود.
public function roles()
{
return $this->belongsToMany(Role::class);
}


مدل Role نشان‌دهنده جدول roles است و رابطه چند به چند با مدل User دارد. این رابطه نیز با استفاده از متد belongsToMany تعریف می‌شود.
public function users()
{
return $this->belongsToMany(User::class);
}


متد belongsToMany :
برای تعریف رابطه چند به چند استفاده می‌شود و می‌تواند چندین پارامتر اختیاری دریافت کند.

1. مدل مربوطه - الزامی
نام مدل مرتبط با این رابطه.

2. جدول واسط - اختیاری
نام جدول واسط (pivot table). اگر این پارامتر تعیین نشود، لاراول به‌طور خودکار نام جداول مرتبط را به ترتیب حروف الفبا ترکیب می‌کند (مثلاً role_user).

3. کلید خارجی مدل فعلی - اختیاری
نام ستون کلید خارجی در جدول واسط که به مدل فعلی اشاره دارد. اگر تعیین نشود، به‌طور پیش‌فرض نام مدل به همراه _id استفاده می‌شود.

4. کلید خارجی مدل مربوطه - اختیاری
نام ستون کلید خارجی در جدول واسط که به مدل مرتبط اشاره دارد. اگر تعیین نشود، به‌طور پیش‌فرض نام مدل مربوطه به همراه _id استفاده می‌شود.

5. کلید والد در مدل فعلی - اختیاری
ستون کلید منحصر به فرد در مدل فعلی. به‌طور پیش‌فرض، لاراول از ستون id استفاده می‌کند.

6. کلید والد در مدل مرتبط - اختیاری
ستون کلید منحصر به فرد در مدل مربوطه. به‌طور پیش‌فرض، لاراول از ستون id استفاده می‌کند.

3- استفاده از رابطه:

برای بازیابی تمامی نقش‌های یک کاربر، از پراپرتی roles که با استفاده از belongsToMany تعریف شده، استفاده می‌کنیم.
$user = User::find(1);
$roles = $user->roles;


برای بازیابی تمامی کاربران مرتبط با یک نقش، از پراپرتی users که در مدل Role تعریف شده، استفاده می‌کنیم.
$role = Role::find(1);
$users = $role->users;


در قسمت بعد متد های مربوط به اعمال تغییرات روی روابط چند به چند توضیح داده می شود.

🔖 #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 →