LoginSignup
1
3

More than 1 year has passed since last update.

Laravelのフォロー機能のEloquentリレーションをサクッと解説

Last updated at Posted at 2023-03-18

LaravelのEloquentモデルクラスに定義すべき多対多の関連性、とくにフォローしている人、されている人の関連性についてまとめました。
イメージとしてはUserクラスにメソッドとして、followings(自分がフォローしているユーザー)、followers(自分をフォローしているユーザー)メソッドの使い方についてです。

ER図

スクリーンショット 2023-03-18 11.47.09.png

フォローユーザー(followings)の表現

Userテーブルにおいて、フォローしているユーザーを多数持ちます。
followsテーブルがフォロー関連性をまとめているので、フォローしている自分のID がfollower_idのレコード 全て取得します。

そのレコードのそれぞれのfollowee_idが自分がそれぞれフォローしているユーザーにあたります。
Eloquentモデルにおいてはこのフォローしている関連性(followings)を、
followsテーブルを用いると、どのクラス(第一引数)どのテーブル(第二引数)どのカラム(第三引数)どのカラム(第四引数)どうする(メソッド名)にあたるイメージです。

ここではUserクラスfollowsテーブルを参照して、フォローしている関連性を表現したいので、
第三引数のフォローしているカラムを表すfollower_idに続いて、フォローされているカラムのfollowee_id
が入るイメージです。

もっと簡潔にいえば、メソッド名で何をしたい(followings)ので、第三引数、第四引数がfollower_id、がfollowee_idフォローしている(followings)といった具合です。

class User
{
    public function followings(): BelongsToMany
    {
    return $this->belongsToMany('App\User', 'follows', 'follower_id', 'followee_id')->withTimestamps();
    }
}

フォローワー(followers)の表現

同様にフォロワー(自分をフォローしているユーザー)も簡潔に表現すると、メソッド名で何をしたい(followers)で、第三引数、第四引数がfollowee_id、がfollower_idフォローされている(followers)といったイメージでさっきのfollowingsと逆のながれでEloquentでメソッドが定義できます。

class User
{
    public function followers(): BelongsToMany
    {
    return $this->belongsToMany('App\User', 'follows', 'followee_id', 'follower_id')->withTimestamps();
    }
}

完成系

class User
{
    public function followings(): BelongsToMany
    {
    return $this->belongsToMany('App\User', 'follows', 'follower_id', 'followee_id')->withTimestamps();
    }

    public function followers(): BelongsToMany
    {
    return $this->belongsToMany('App\User', 'follows', 'followee_id', 'follower_id')->withTimestamps();
    }
}
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3