رابطه چند به چند بر روی یک مدل در لاراول

نمونه بارز رابطه چند به چند را در شبکه های اجتماعی فراوان دیده ایم. روابط دوستی در شبکه های اجتماعی بدین گونه است. هر کاربر با چندین کاربر دیگر رابطه دوستی دارد. هر دو طرف این رابطه از یک نوع هستند. حال اگر بخواهیم این نوع رابطه را در فریم ورک لاراول پیاده سازی کنیم چطور؟

پاسخ این سوال را در این آموزش بدست خواهیم آورد.

پیاده سازی رابطه چند به چند

در فریم ورک لاراول برای روابط چند به چند می توان از قابلیت hasMany و belongsToMany استفاده کرد.

به نمونه کد زیر توجه کنید:


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
public function friends()
  {
     return $this->belongsToMany('App\User', 'friendships', 'user_id', 'friend_id');
  }
}

 

در نمونه کد بالا User دارای تابعی است که خروجی آن مجموعه دوستان خواهدبود.

[divider]

برقراری رابطه چند به چند

حال اگر بخواهیم دو کاربر را با هم دوست کنیم دو حالت وجود دارد. اول اینکه دوستی را دو طرفه ببینیم یا یک طرفه. در حالت دو طرفه یک کاربر می تواند با کاربر دیگر دوست شود اما لزوما کاربر دوم رابطه ی دوستی با کاربر اول را ایجاد نکند. مثال این مدل اینستاگرام است. در حالت یک طرفه کافیست تا یکی از کاربران با دیگری ارتباط برقرار کند، در این صورت رابطه دوستی میان هر دوی آنها شکل می گیرد. مثال این حالت فیسبوک است.

نمونه کدی که در ابتدای این آموزش ارائه شد از نوع دوستی دو طرفه بود. برای برقراری ارتباط دوستی می توانید از نمونه کد زیر استفاده کنید:


<?php

$user1 = App\User::find(1);

$user2 = App\User::find(2);

&nbsp;

$user1->friends()->save($user2);

در نمونه کد بالا اولین کاربر ارتباط دوستی با کاربر دوم را برقرار نمود. حال برای نمایش لیست دوستان می توان از نمونه کد زیر استفاده کرد:


$user1->friends

کد بالا لیست دوستان کاربر اول را بر می گرداند که اکنون در این لیست کاربر دوم حضور دارد.

موفق و پیروز باشید…

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *