更新:已解决,问题不是很有说服力,在多个模型中使用多个范围非常有效。我的视图中有一个输出,可以查询每个居民的职业,房间和楼层。这导致超过2600个查询约200名居民,这是我的表现下降的原因。我现在使用急切加载通过添加->with(['occupation.room'])
来获取第一个查询的所有职业和房间。
我有一个模特,住在房间里的居民。这些房间出租一段时间,这就是我们有桌子职业的原因。此表确定哪个居民居住在哪里。 这是一个可视化:
我的问题是,Eloquent没有有效的方法来确定所有居住在X楼的居民或Y楼的所有居民(参见房屋attr的楼层模型)。
我在Room使用查询范围:
public function scopeHouse($query, $house) {
return $query->whereHas('floor', function($q) use($house) {
$q->where('house', $house);
});
}
关于职业:
public function scopeHouse($query, $house) {
return $query->whereHas('room', function($q) use($house) {
$q->house($house);
});
}
和居民:
public function scopeHouse($query, $house) {
return $query->whereHas('occupation', function($q) use($house) {
$q->house($house);
});
}
这显然效率不高。我可以查询所有职业,然后单独查询房间和居民,但这会破坏雄辩的流畅的api。
有什么建议吗?