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