У меня есть таблица (Model3), которую я пытаюсь запросить на основе отношений между Model1 и Model2 и задействованного фильтра. Я пытаюсь запросить все записи Model3 с некоторыми Model1.id и Model2.status = 0.
Model1 Model2 Model3
PK: id PK: id PK: id
FK: model1_id
FK: model3_id
status
Model1 может иметь много Model2. Model2 имеет FK для одной Model3. Model3 не имеет отношения к Model2. Я думал, что это (менее) сложно сделать это в два этапа. Итак, я определил отношение для Model1:
class Model1 {
...
public function Model2s() {
return $this->hasMany('Model2', 'model1_id')
->where('status', '=', '0' );
}
}
Тогда мне нужно было бы просмотреть результаты Model2, а затем перейти к соответствующей Model3. Поэтому я создал отношение на Model2 (половина отношения один к одному):
class Model2 {
...
public function Model3() {
return $this->belongsTo('Model3', 'model3_id' );
}
}
Проблема в том, что Model2 может иметь 1000 записей для циклического прохождения, чтобы получить Model3, что потребует много времени.
Есть ли способ сделать это с помощью отношения hasManyThrough в Model1, которое учитывает необходимость использования фильтра Model2.status = 0? Тогда я могу использовать один запрос, чтобы попасть в Model3?