LaravelのModel名をリクエスト毎に動的Model名称でEloquentを利用したいです。
例えばrequest.id=1の場合は
TestModel_1を利用したく、紐づいているテーブルはTestModel_1とします。
request.id=2
TestModel_2を利用したいです。紐づいているテーブルはTestModel_2とします。
テーブル毎にModelファイルを作成するのは馬鹿馬鹿しいので、Modelのphpファイルは1つに纏めたいと思っています。
DBクラスではできましたが、Eloquentで上手くいっておりません。
いい案がある方いましたら教えてください。
Modelのconstructにて
protected $table = 'TestModel'; public function __construct(int $id) { parent::__construct(); $this->table = $this->table. '_'.$id; } public function getTestModel() { return TestModel::all(); }
で試しましたが、
TestModel::query();などで利用する場合
constructにてToo few arguments to functionが発生しエラーになってしまいます。debugで追うとTestModel::all();にて発生します
呼び出し元 $a = new TestModel(id: 1); $a->getTestModel();
よろしくお願いします。
追記
protected $table = ''; app()->bind(TestModel::class, function () { $tm = new TestModel(); $tm->table = 'test_model_1'; return $classX; }); try { $tm = app()->make(TestModel::class); $table = $tm->table; $a = $tm->getCollectionTpUrgent(); } catch (BindingResolutionException $e) { } return $a;
上記のパターンでは外から$tableは変更されましたが、$tm->getCollectionTpUrgent();で対象テーブルなしのexceptionが発生しました。
回答1件
あなたの回答
tips
プレビュー