بخش سوم - روابط - قسمت دوم
رابطه One-to-Many (یک به چند)
یکی از رایجترین روابط در پایگاه داده است. این رابطه زمانی استفاده میشود که یک رکورد در یک جدول میتواند به چندین رکورد در جدول دیگری مرتبط باشد.
مثال:
- یک کاربر میتواند چندین پست داشته باشد.
- یک پست میتواند چندین نظر داشته باشد.
1- ساختار جداول:
برای پیادهسازی رابطه یک به چند، ما نیاز به دو جدول داریم: یکی به عنوان مدل والد و دیگری به عنوان مدل فرزند. جدول فرزند یک کلید خارجی (foreign key) دارد که به مدل والد مرتبط است.
مثال:
جدول users اطلاعات کاربران را نگهداری میکند و یک فیلد id به عنوان primary key دارد.
جدول posts اطلاعات پستهای کاربران را نگهداری میکند و دارای یک ستون به نام user_id است که به کلید خارجی در جدول users اشاره میکند.
2- ایجاد مدلها:
1-مدل User، نشاندهنده جدول users است. این مدل میتواند چندین پست داشته باشد، بنابراین رابطه یک به چند از طریق متد hasMany تعریف میشود. این متد مشابه hasOne است اما چندین رکورد را تحت تاثیر قرار می دهد.
public function posts()
{
return $this->hasMany(Post::class);
}
2- مدل Post نشاندهنده جدول posts است. هر پست به یک کاربر تعلق دارد، بنابراین رابطه یک به چند از سمت پست با متد belongsTo تعریف میشود.
public function user()
{
return $this->belongsTo(User::class);
}
3- پیادهسازی رابطه:
برای دسترسی به تمامی پستهای یک کاربر، میتوانید از پراپرتی posts استفاده کنید که رابطه hasMany را تعریف کرده است.
$user = User::find(1);
$posts = $user->posts;
برای دسترسی به کاربر مربوط به یک پست، میتوانید از پراپرتی user استفاده کنید که رابطه belongsTo را تعریف کرده است.
$post = Post::find(1);
$user = $post->user;
برای ایجاد یک پست جدید برای یک کاربر، میتوانید از متد posts() استفاده کنید و پست را به آن کاربر مرتبط کنید.
$user = User::find(1);
$post = new Post([
'title' => 'My Third Post'
]);
$user->posts()->save($post);
و حتی میتوانید پستهای یک کاربر را بهسادگی بهروزرسانی کنید.
$user = User::find(1);
$post = $user->posts()->first();
$post->title = 'Updated Title';
$post->save();
با استفاده از روابط در لاراول بدون استفاده از عملیات های پیچیده رکورد های مرتبط به هم بازیابی/حذف/ویرایش یا ایجاد می شوند.
رابطههای یک به یک و یک به چند، دو نمونه از سادهترین روابط در لاراول هستند که بدون آنها نیز میتوانیم کوئریهایمان را بنویسیم، هرچند کار کمی پیچیدهتر خواهد بود. اما در قسمتهای بعدی با روابط پیچیدهتر و پیشرفتهتری آشنا خواهیم شد که اهمیت بیشتری در سادهسازی و بهینهسازی کوئریها دارند.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.