Laravel雄辩地将过滤器添加到中间关系以获得更深层次的关系

时间:2019-01-14 21:18:47

标签: php laravel eloquent laravel-5.2

我有一个要根据Model1和Model2关系查询的表(Model3)和一个涉及的过滤器。我试图查询给定一些Model1.id和Model2.status = 0的所有Model3记录。

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,这很费时间。

有没有一种方法可以使用Model1上的hasManyThrough关系来考虑我需要Model2.status = 0的过滤器?然后我也许可以使用一个查询来获取Model3?

0 个答案:

没有答案