بخش دوم - مدل ها - قسمت دوازدهم (آشنایی با روابط)
روابط دیتابیس در لاراول به نحوه اتصال جداول به یکدیگر اشاره دارد. این روابط به شما اجازه میدهند که جداول مرتبط را به روشی ساده و مستقیم بازیابی و مدیریت کنید. معمولاً روابط در لاراول از طریق 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 #لاراول #فصل_۴
💠 @AmirhDeveloper
.