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

بخش دوم - مدل ها - قسمت دوازدهم (آشنایی با روابط)


روابط دیتابیس در لاراول به نحوه اتصال جداول به یکدیگر اشاره دارد. این روابط به شما اجازه می‌دهند که جداول مرتبط را به روشی ساده و مستقیم بازیابی و مدیریت کنید. معمولاً روابط در لاراول از طریق Eloquent ORM مدیریت می‌شوند، که این روش دسترسی و کار با داده‌های مرتبط را بسیار آسان‌تر می‌کند.

انواع روابط:

1- رابطه One-to-One (یک به یک):
در این نوع رابطه، هر رکورد از یک جدول فقط به یک رکورد از جدول دیگر مرتبط است.

مثال:
هر کاربر فقط یک پروفایل دارد.

2- رابطه One-to-Many (یک به چند):
در این نوع رابطه، هر رکورد از یک جدول می‌تواند به چندین رکورد از جدول دیگر مرتبط باشد.

مثال:
هر پست می‌تواند چندین نظر داشته باشد.

3- رابطه Many-to-One (چند به یک):
این رابطه در واقع برعکس One-to-Many است. چند رکورد از جدول دوم به یک رکورد در جدول اول مرتبط است.

مثال:
چند نظر به یک پست تعلق دارد.

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

مثال:
هر کاربر می‌تواند چندین نقش داشته باشد و هر نقش به چندین کاربر اختصاص داده شده باشد.

5- رابطه Has-Many-Through (چندین رکورد از طریق یک رابطه واسط):
این نوع رابطه به شما امکان می‌دهد که رکوردهای یک جدول را از طریق رابطه‌ای با یک جدول واسط بازیابی کنید.

مثال:
هر شهر می‌تواند چندین دکتر از طریق بیمارستان‌ها داشته باشد.

6- رابطه Polymorphic Relationships (روابط چندشکلی):
این نوع رابطه به شما امکان می‌دهد که یک مدل به چندین مدل دیگر مرتبط باشد.

مثال:
یک عکس می‌تواند به یک پست یا به یک کاربر مربوط باشد.

مثال ساده از رابطه یک به یک (One-to-One)

فرض کنید دو جدول به نام‌های users و profiles دارید. هر کاربر فقط یک پروفایل دارد و هر پروفایل به یک کاربر تعلق دارد. با استفاده از رابطه یک به یک در لاراول، می‌توانید به سادگی این رابطه را مدیریت و بازیابی کنید.

مدل User:
class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}

متد profile نشان می دهد که هر کاربر یک پروفایل دارد.

مدل Profile:
class Profile extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}

متد user نشان می دهد که هر پروفایل متعلق به یک کاربر است.

نکته: جدول profiles دارای ستونی به نام user_id است که کلید خارجی (foreign key) به جدول users می‌باشد.

استفاده از رابطه در کد:

به جای نوشتن یک کوئری پیچیده برای اتصال دو جدول و بازیابی پروفایل یک کاربر، می‌توانید به سادگی از رابطه Eloquent استفاده کنید.
در ادامه یک مثال بدون استفاده از روابط و یک مثال با استفاده از روابط آورده شده.

بدون رابطه:
برای بازیابی پروفایل کاربر به صورت دستی باید کوئری پیچیده‌تری بنویسید:
$user = User::find(1);
$profile = Profile::where('user_id', $user->id)->first();


با رابطه یک به یک:
اما با استفاده از رابطه، کار شما بسیار ساده‌تر و خواناتر می‌شود:
$user = User::find(1);
$profile = $user->profile;

پراپرتی profile در کد بالا درواقع همان متد profile است که در مدل User تعریف کرده ایم.

در قسمت های بعد هر یک از این روابط را به طور مفصل توضیح خواهیم داد.

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

👤 AmirHossein

💎 Channel: @DevelopixLaravel
  • ❤ 4
  • 👍 1
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 →