我有一个要根据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?