scopeの定義方法
class Hoge extends Model {
public function scopeFuge($query, $code) {
//処理
}
}
関数名にscopeを追加し、引数$query
と$code(引数名は自由)
を定義します。
引数
$queryとは
この引数は、whereで取得されるのと同じBuilderインスタンスが渡されます。
$code(引数名は自由)
コントローラから渡された引数がこの値に代入されます。
例
Person.php(Model)
class Person extends Model {
public function scopeNameEqual($query, $str)
{
return $query->where('name', $str);
}
}
PersonController.php(Controller)
use App\Person;
class PersonController extends Controller {
public function search(Request $request) {
$item = Person::nameEqual($request->input)->first();
//〜その他処理は割愛〜
return view('person.find, $param);
}
}
scopeを呼び出す時は、関数名のscopeを省略します。
なぜscopeを使うのか
scopeを使うことにより、上記の2つの引数が利用できるようになります。