احتمالا قصد راه اندازی یک شبکه اجتماعی دارید که در بخش روابط بین جداول کاربران و جدول میانجی فالورها مشکل دارید بنابراین با من همراه باشید تا با نحوه ایجاد جداول مربوط به بخش فالوو کاربران آشنا بشیم.
اگر خیلی خلاصه اش کنیم ، شما ابتدا یک جدول بنام کاربران ایجاد خواهید کرد که اطلاعات مایگریشن اون با فرض فیلدهایی که من در نظر گرفتم به شرح زیر خواهد بود :
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('first_name');
$table->string('last_name');
$table->string('password');
$table->string('gender');
$table->rememberToken();
$table->timestamps();
});
شما بایستی یک جدول دیگر با اسم Followers ایجاد کنید که مایگریشن اون به شرح زیر باشه :
Schema::create('followers', function (Blueprint $table) {
$table->increments('id');
$table->integer('follower_id')->unsigned();
$table->integer('following_id')->unsigned();
$table->timestamps();
});
جدول followers متعلق به جدول users هست و دو تا کلید خارجی داریم داخلش داریم که هر دو به جدول users ارجاع داده شدن ، بنابراین کافیست شما وارد مدل User خودتون بشید که لاراول براتون در مسیر App\User ساخته و دو تا فانکشن زیر رو به آن اضافه کنید :
// users that are followed by this user
public function following() {
return $this->belongsToMany(User::class, 'followers', 'follower_id', 'following_id');
}
// users that follow this user
public function followers() {
return $this->belongsToMany(User::class, 'followers', 'following_id', 'follower_id');
}
کار تمامه و شما خیلی راحت می تونید در هر جایی از برنامه خودتون برای فالو کردن یک یوزر از دستور زیر استفاده کنید :
$userA_object->following()->attach($userB_id);
که کاربر A قصد فالوو کاربر B رو داره و برای برداشتن فالوو هم از دستور زیر استفاده کنید :
$userA_object->following()->detach($userB_id);
برای دریافت لیست فالورهای یک کاربر هم از دستور زیر استفاده کنید :
$a_followers = $a->followers()->get();
برای دریافت لیست فالوو شدگان کاربر هم از دستور زیر استفاده کنید :
$a_followers = $a->following()->get();
امیدوارم براتون مفید بوده باشه