Lumen:如何使用Eloquent获取子表列表?

Pat*_*tle 5 php eloquent lumen

我有以下数据库表

  • 城市
  • 街道
  • 房屋

他们之间有一对多的关系,所以Towns可以有很多,Streets并且Streets可以有多个关系Houses.

我有ID的ID,Town我只想从中得到所有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;
});
Run Code Online (Sandbox Code Playgroud)

这有效,但有更好的方法吗?我觉得好像我应该能够使用雄辩的方式获得房屋清单.之后不得不做一些映射似乎不对.

med*_*eda 1

你是对的,在这种情况下延迟加载效率不高。

您只需要房屋列表,我只需使用关节构建适当的查询即可。

这是一个例子:

House::query()
->join('street', 'house.id', 'street.id')
->join('town', 'street.town_id', '=', 'town.id')
->where('town.id', $town_id)
->get();
Run Code Online (Sandbox Code Playgroud)

根据需要进行调整。

有时使用查询构建器比雄辩更有意义。