我有以下数据库表
- 城镇
- 街道
- 房子
它们之间是一对多的关系,所以 Towns
可以有很多 Streets
而 Streets
可以有多个 Houses
就可以了。
我有 城镇
的 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;
});
这行得通,但有更好的方法吗?我觉得好像我应该能够使用 Eloquent 方式获得房屋 list 。事后必须做一些映射似乎不对。
最佳答案
你是对的,延迟加载在这种情况下效率不高。
您只需要房屋列表,我会用关节构建适当的查询。
这是一个例子:
House::query()
->join('street', 'house.id', 'street.id')
->join('town', 'street.town_id', '=', 'town.id')
->where('town.id', $town_id)
->get();
根据需要调整。
有时使用查询构建器比 Eloquent 更有意义。
关于php - Lumen:如何使用 Eloquent 获取子表列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958057/