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を操作する方法と変わりません。
以上で、ステータスが男性の投稿を取得することができました。
最後に、ローカルスコープはクエリビルダでは使用できない点に注意してください。
以上!!!!!!!