【Laravel】スコープとその役割
Scope
本記事ではLaravelのクエリスコープのことを指すという前提で進める
特に、Model内で定義する関数のローカルスコープについて説明する
ローカルスコープ
アプリ全体で再利用できる、一連の共通制約のこと
例えばいいねが100件以上ついた投稿を取得したい場合などで、scopePopularというスコープを定義しておくと、条件を書くのではなく、文字として視認しやすいような条件で絞り込める
code:php
// model
public function scopeRecently($query) {
$last_month = new Carbon('last month');
return $query->where('created_at', '>=', $last_month);
}
// controller
public function studyLocalScope() {
$recently_post_count = Post::Recently()->count();
return '直近の投稿件数は' . $recently_post_count . '件です。';
}
どう役に立つ?
自分の気になる点なので少し調べたい
code:SampleModel.php
// sample_modelsテーブルのactiveカラムがtrueの値であることを示すスコープ
public function scopeActive($query) {
return $query->where('active', 1);
}
確かにこういうのなら、where('active', 1)とコードで書くよりも分かり易いかも?
以下のような使い方はあんまり納得できなかったけど...
code:SampleModel.php
public function scopeOfUserId($query, $user_id = '') {
if(empty($user_id)) {
return $query;
} else {
return $query->where('user_id', $user_id);
}
}
単純に->where('user_id', $user_id')とcollectionに書けばいいんじゃないかと思ったけど
$user_id=nullだった時にエラーが起こらないような形にされてることに気づいた
なるほどな〜