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

时间:2017-05-13 21:15:26

标签: php eloquent lumen

我有以下数据库表

  • 城镇
  • 街道
  • 房屋

他们彼此之间存在一对多的关系,因此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;
});

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

1 个答案:

答案 0 :(得分:1)

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

你只需要房屋清单,我只需要用关节构建正确的查询。

以下是一个例子:

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

根据需要调整。

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