こちらの記事は以下の書籍を参考にアウトプットとして執筆しました。
PHPフレームワーク Laravel入門 第2版
検索とスコープ
スコープとはレコードを絞り込むた目の機能
where
IDによる検索はfindうぃ使えばできた。
他の検索はwhereと同じようなものがモデルクラスにも用意されている。
複数のレコードを取得
$変数=モデルクラス::where(フィールド名,値)=>get();
最初のレコードだけを取得
$変数=モデルクラス::where(フィールド名,値)=>first();
このwhereはビルダクラスのインスタスを返す。
これはDBクラスビルダとは違いうがとても似ていて、ほとんど同じを考えて構わない
スコープの利用
whereはDBクラスとナジ感覚で操作できる。しかしモデルクラスのほうが使い勝手は良い。
モデルクラスを使うさらなるメリットとしてスコープがある。
これは特定条件の検索ができる。
whereで複雑な検索をしようとすると、whereをいくつもつなぎ合わせるとわかりにくくなるがスコープを使うとわかりやすくなる
スコープには
- ローカルスコープ
- グローバルスコープ
の2つがある
ローカルスコープ
モデル内にメソッドを酔いするもの。
呼び出したときだけスコープが機能する。
グローバルスコープ
ローカルスコープは
検索条件を設定してBuilderを返すメソッドを用意してそれを呼び出すもの。
グローバルスコープは処理を用意していおくだけでそのモデルでのすべてのレコード取得が適応される。
専用のメソッド通いされていおり、それを利用する。
bootメソッド
処理の組み込みはモデルがサレク生される際の初期化処理で実行する。
boot初期がメソッドの基本
protected static function boot()
{
parent::boot();
//初期化処理
}
静的メソッドのためモデルインスタンス自身を利用する方法は欠けない。
グローバルスコープでの処理の用意はaddGlobalScopeを使う
static::addGlobalScope(スコープ名,function(Builder $builder))
{
//絞り込み処理
}
これはグローバルスコープを追加するメソッドでこれをオーバーライドしてグローバルスコープを追加する