我有以下数据库表
他们彼此之间存在一对多的关系,因此Towns
可以包含多个Streets
,而Streets
可以有多个Houses
。
我有Town
的ID,我只想从中获取城镇中所有Houses
的列表。所以此刻我正在做。
//This gives me streets and houses in nested arrays
$towns = Town::with(['streets', 'streets.houses' => function($query) {
$query->where('active', 1)
}])->find($town_id);
//But I only want a list of houses so I do
$houses = $towns->streets->map(function($street) {
return $street->houses;
});
这样可行,但有更好的方法吗?我觉得好像我应该能够使用雄辩的方式获得房屋清单。之后不得不做一些映射似乎不对。
答案 0 :(得分:1)
在这种情况下,延迟加载效率不高。
你只需要房屋清单,我只需要用关节构建正确的查询。
以下是一个例子:
House::query()
->join('street', 'house.id', 'street.id')
->join('town', 'street.town_id', '=', 'town.id')
->where('town.id', $town_id)
->get();
根据需要调整。
有时使用查询构建器比使用eloquent更有意义。