首页 > 解决方案 > Laravel:如何将连接表加载到子数组中?

问题描述

我有 2 张桌子:

User:
id
schedule_id
name

Schedules:
id
date

我使用以下命令执行查询eager loading

User::with (['schedules'])->get()->first();

并得到这样的结果:

[
    'id' => '3',
    'schedule' => [
        'id' => '13',
        'date' => '20.11.2020',
    ],
    'name' => 'John',
];

但是当我使用执行类似的查询时join

User::join ('schedules', 'user.schedule_id', '=', 'schedules.id')->get()->first();

我得到了这样的结果,合并数组:

[
    'id' => '13',
    'date' => '20.11.2020',
    'name' => 'John',
];

如何在 Eloquent 中使用 join 获得分离数组的结果?

注意:在原始 PHP 和 PDO 中,对于任何带有连接的查询,我总是得到单独的数组。

标签: phpsqllaraveleloquenteager-loading

解决方案


来自数据库查询的数据将始终格式化为平面数组,这就是数据库的工作方式。Eloquent 在幕后有很多魔法,它将正确的相关值映射到集合中的正确模型。

在使用连接时,Eloquent 无法知道哪些数据应该映射到哪个关系或属性。

如果你想使用连接查询,你要么必须为模型上的这些属性使用别名。或者,您可以在使用数据之前按照您想要的方式手动映射属性。


推荐阅读