【发布时间】: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