Laravel Eloquent - 在查询结果中包含相关列

时间:2014-12-30 20:29:19

标签: join laravel eloquent fluent

目的: 从我的查询返回一个复合响应,包含使用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连接这两个表并返回一个由我在视图中表示的字段组成的对象?

1 个答案:

答案 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]', ...)

相关问题