Laravel ローカルスコープを使う

ローカルスコープとは

Laravelでは、eloquentを用いてデータベースの情報を操作することができます。

eloquentを使うにあたって、何度も同じ処理を書いていることはないでしょうか?

例えば、

  • 性別が男性のみ
  • ステータスが公開のみ
  • 数値が〜より大きい

など、1つのサービス内で同様のロジックを用いてeloquentを操作するケースが多々あると思います。

その時に使用できるのがローカルスコープです。

ローカルスコープは、eloquentを扱う同様の処理をまとめることができます。

今回は、投稿の性別ステータスが男性のみというローカルスコープを作成して、紹介していきます。

(投稿の性別ステータスとは・・・?という感じかもしれませんが、1例のために使用したのみなので深い意味はありません・・・)

 

実装

実装の流れは以下のものになります。

①Modelクラスでローカルスコープを定義する

②使う

 

①Modelクラスでローカルスコープを定義する

App\Models\Post

public function scopeMens($query) ・・・①
{
 return $query->where('gender', 0); ・・・②
}

①ローカルスコープを定義します。

ローカルスコープは,scpoe + 名前で定義をする必要があります。scopeがないとローカルスコープにならないので気をつけてください。

引数は、一般的に$queryにします。

②ロジックを返り値で渡します。

引数で受け取った$queryに続いてeloquentで使用するロジックを実装します。

(今回はDB内で、0が男性のステータスになります)

 

②使う

App\Http\Controllers\PostController

$posts = Post::mens()->get();

定義したローカルスコープは、メソッド名の先頭のscpoeを除いた形で使用できます。

使用方法は、上記のコードの通り、通常のeloquentを操作する方法と変わりません。

以上で、ステータスが男性の投稿を取得することができました。

最後に、ローカルスコープはクエリビルダでは使用できない点に注意してください。

 

以上!!!!!!!