【问题标题】:Laravel Eloquent - include related columns in query resultsLaravel Eloquent - 在查询结果中包含相关列
【发布时间】:2015-02-27 00:15:08
【问题描述】:

目标: 从我的查询中返回一个复合响应,其中包含使用 Eloquent 的两个相关模型的列,以便我可以使用 Form::model 恢复视图中用户值和地址值的字段值。我想要一个对象中的所有数据,如果我不需要,我不想使用紧凑或以其他方式操作数据。

表格:

users (id, userWorkAddressID, ...)

addresses (ID, ...)

模型

用户

public function address()
{
    return $this->hasOne('Address', 'ID', 'userWorkAddressID');
}

地址

public function user()
{
    return $this->belongsTo('User', 'id', 'userWorkAddressID');
}

我尝试过的事情

$user = User::find($id);

这只是返回用户数据 - 没有地址数据

$user = User::find($id)->address

这只是返回用户的地址,但没有用户数据

$user = User::with('address')->find($id);

这里返回用户数据,没有地址数据

$user = User::with(array('address' => function($query){
    $query->addSelect(array('id', 'addressLine1'));
}))->find($id);

这也只返回用户数据,没有地址数据

我可以只使用 Fluent,但我必须这样做吗?

如何使用 Eloquent 连接这两个表并返回由我在视图中表示的字段组成的单个对象?

【问题讨论】:

  • $user = User::with('address')->find($id); 应该确实有效。地址模型应该嵌套在address 属性中
  • 正如@lukasgeiter 所说,如果您急于加载相关模型(对于belongsTo、hasOne 和其他一对一关系),它将起作用。只需确保使用数组 (Form::text('address[some_field]',...)) 表示法即可。
  • 你的关系是错误的——第二个参数总是外键,所以可能不是ID
  • @lukasgeiter - 我也是这么想的,但是我的结果对象上没有 [address] 属性。相反,我只有用户表中的所有字段。
  • @user2063125 这可能是因为关系设置错误。请参阅 Jarek 的评论。

标签: join laravel eloquent fluent


【解决方案1】:

首先你的关系是错误的。将两者都更改为:

public function address()
{
    return $this->hasOne('Address', 'userWorkAddressID', 'ID');
}
Address

public function user()
{
    return $this->belongsTo('User', 'userWorkAddressID', 'id');
}

那么您可能会看到相关模型。请记住:

1 急切加载相关模型:`$user = User::with('address')->find($someId);

2 对相关模型使用数组表示法,形式为:Form::model($user, ..)Form::text('address[city]', ...)

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 2020-09-24
    • 2018-10-22
    • 2015-05-13
    • 2021-10-26
    • 2019-12-24
    • 2021-05-28
    • 2016-03-25
    • 2018-11-04
    相关资源
    最近更新 更多