Join 在查询结果中包含相关列

Join 在查询结果中包含相关列,join,laravel,eloquent,fluent,Join,Laravel,Eloquent,Fluent,目标: 从我的查询返回一个复合响应,其中包含来自两个相关模型的列,使用Eloquent可以使用Form::model恢复视图中用户值和地址值的字段值。我希望所有数据都在一个对象中,如果不需要的话,我不想使用compact或以其他方式操作数据 表格: users (id, userWorkAddressID, ...) addresses (ID, ...) 型号 public function user() { return $this->belongsTo('User', '

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

表格:

users (id, userWorkAddressID, ...)

addresses (ID, ...)
型号

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

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(array('address' => function($query){
    $query->addSelect(array('id', 'addressLine1'));
}))->find($id);
这只返回用户的地址,但不返回用户数据

$user = User::with('address')->find($id);
这将返回用户数据,不返回地址数据

$user = User::find($id)->address
$user = User::with(array('address' => function($query){
    $query->addSelect(array('id', 'addressLine1'));
}))->find($id);
这也只返回用户数据,不返回地址数据

$user = User::find($id)->address
$user = User::with(array('address' => function($query){
    $query->addSelect(array('id', 'addressLine1'));
}))->find($id);
我可以用Fluent,但我必须这么做吗


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

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

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]”,…)
$user=user::with('address')->find($id)应该实际工作。地址模型应该嵌套在
地址
属性中,正如@lukasgeiter所说,如果您急于加载相关模型(对于
belongsTo
有一个
和其他一对一关系),它将起作用。只需确保使用数组(
Form::text('address[some_field]”,…)
)表示法。并且您的关系是错误的-第二个参数始终是外键,所以可能不是
ID
@lukasgeiter-这也是我所想的,但我的结果对象上没有[address]属性。取而代之的是,我只保留了users表中的所有字段。@user2063125这可能是因为关系设置错误。见Jarek的评论。