【Laravel】Eloquentのグローバルスコープで検索機能実装!
PHPバージョン:7.1.14
Laravelバージョン:5.7.9
前回はローカルスコープ検索についてでした!
今回はもうひとつのスコープ、
グローバルスコープについてです!
そのモデルを使う際に必ず適用されるスコープです!
モデルにグローバルスコープ作成
Articleモデルにグローバルスコープを作成していきます。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; // ***** 開始 ***** use Illuminate\Database\Eloquent\Builder; // ***** 終了 ***** class Article extends Model { protected $guarded = ['id']; // ***** 開始 ***** protected static function boot() { parent::boot(); static::addGlobalScope('category_laravel_only', function (Builder $builder) { $builder->where('category', 'Laravel'); }); } // ***** 終了 ***** }
app>Models>Articles.php
グローバルスコープを使うとコントローラー等に別途記述することなく
全てのモデルデータに検索条件をかけることができます。
今回はカテゴリーを"Laravel"に限定したグローバルスコープを作成しました。
グローバルスコープはModelクラスに用意されている
bootというモデル初期化用メソッド内に、
静的メソッドの"addGlobalScope"メソッドを利用して実現します。
第一引数にscope名、第二引数に無名関数を指定します。
無名関数内にBuilderクラスを利用するので、
Builderクラスのuse宣言を忘れないように注意して下さい。
結果
これだけでグローバルスコープは機能します。
http:// localhost:8000/articles/
こちらにアクセスし、記事一覧を表示します。
無事、カテゴリーが "Laravel"の記事だけが表示されました!
今回はここまでです、ありがとうございました〜!