Posted at

Laravel5: Controll内で使用するEloquentモデルを動的に変更

使用するEloquentモデルが違うだけで処理が同じControllerがあったので、一つにまとめたかった。


モデル名を入れた変数で呼び出す

呼び出すClass名を変数に格納すれば、そこからnewもstaticメソッドも利用が可能。

例えばinputで受け取った値が"staff"ならStaff::select(〜、それ以外ならUser::select(〜に切り替えたい場合。


HogeController.php

class HogeController extends Controller

{
public function index(Request $request)
{
if ('staff' === $request->type) {
$table = 'App\Staff';
} else {
$table = 'App\User';
}
$contents = $table::select('id', 'name')->get();
return response()->json($contents);
}
}

変数に入れる文字列はuse App\Staff;を設定していても$targetModel = 'App\Staff';と書く必要があるので注意。


参考

PHPにおいてstaticメソッドの呼び出し元クラスを動的に変更