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

标签 php eloquent lumen

我有以下数据库表

  • 城镇
  • 街道
  • 房子

它们之间是一对多的关系,所以 Towns 可以有很多 StreetsStreets 可以有多个 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/

相关文章:

php - 根据保管箱中发布的数据选择声明

php - 如何更改 Laravel 模型表名称

laravel - 如何将链式作业分派(dispatch)到 Lumen 6 中的队列?

php - 正则表达式将 2 个反斜杠替换为 3 个

php - <audio> 控件的轨迹栏不移动的元素

php - 如何在yii中设置默认主页?

Laravel关系: A division has many ranks,一个等级有1个分区,一个用户只有1个等级

php - Laravel:如何在预加载中获取关联表的列

php - 流明启用 CSRF token

php - Laravel:JSON 和数据透视表