hasMany
関係メソッドの署名に気付いた場合:
return $this->hasMany(Model::class, 'foreign_key', 'local_key');
つまり、Laravel がクエリを作成するときに、2 番目の引数がdefined inforeign_key
の列と見なされます。table
Model::class
あなたのケースで単純化するには:
return $this->hasMany(Items::class, 'c.class_id', 'class_id')->...
rightjoin はちょっと置いておいて、Laravel はtablec.class_id
の外部キーと考えていますが、Item::class
これは確かにitems
table です。
したがって、結果のクエリは次のとおりです。
SELECT * FROM items WHERE items.c.class_id = 10
次に、適切な結合を追加すると、laravel はメイン クエリに追加して次のようにします。
SELECT * FROM items
RIGHT JOIN items_classes as c ON c.items_id = items.id
WHERE items.c.class_id = 10
Model を に関連付けていて に関連付けていないため、 Laravel はitems_classes
リレーションで参照しません。List
Item::class
ItemClass::class
必要なデータについてはわかりませんが、以下のように使用できるかどうかを確認してください。
class List extends Model
{
public function items(){
return $this->hasMany(Items::class, 'c.class_id', 'class_id');
}
}
List::with(['items', function($q){
return $q->->rightjoin('items_classes as c', 'c.items_id', '=', 'items.id');
}])->get();
これにより、リレーションシップを更新して目的のクエリを取得する方法がわかると思います。必要なテーブル構造とデータを追加すると、リレーションシップで回答を更新できます。