目的: 从我的查询返回一个复合响应,包含使用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连接这两个表并返回一个由我在视图中表示的字段组成的对象?
答案 0 :(得分:0)
首先关闭你的关系是错误的。将两者都更改为:
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]', ...)