Laravel Eloquent Добавление фильтра в промежуточную связь, чтобы получить более глубокую связь - PullRequest
0 голосов
/ 15 января 2019

У меня есть таблица (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?

...