Examples テーブル
↓カラム
user_id | monster_id | created_at | updated_at
このようなテーブルを通してリレーション先のデータを取得する際に、このテーブルのカラム値によって使用するリレーションメソッドを切り替えたいです。
例えばExampleモデルに下記のようなメソッドがあるとします。
public function one() { return $this->hasMany('App\Model\TableModel\One'); } public function two() { return $this->hasMany('App\Model\TableModel\Two'); }
このとき
Examplesテーブルのuser_idが1で,monster_idが 2 or 3 or 4 のときはそれらに対してoneメソッドを、
user_idが 7 or 8 or 9 でmonster_idが 1 のときはそれらに対してtwoメソッドを、というふうにクエリビルダを書きたいとき、どのようにすればよいでしょうか?
以下のようにしてみたのですがWhereのなかでwithを使ってみてもやはりなにも返ってきませんでした。
何かいい方法はないでしょうか?
$user = Example::Where(function ($query) { $query->where('user_id', 1) ->whereIn('monster_id', [ 2, 3, 4 ] ) ->with(['one' => function ($query) { $query->where(~~)->get(); }]); })->orWhere(function ($query) { $query->where('monster_id', 1) ->whereIn('user_id', [ 7, 8, 9 ] ) ->with(['one' => function ($query) { $query->where(~~)->get(); }]); })->get();
あなたの回答
tips
プレビュー