我有Order
模型属于User
且有Revision
s。
当我尝试加载订单时,包括:来自其用户的'id'
和'name'
字段以及来自整个修订版的某些字段(包括'user_id'
字段),我这样做:
return Order::with(array('user' => function ($query) {
$query->select('id','name');
}), 'revisions' => function ($query) {
$query->select('id','created_at','user_id','operation','text');
})->get();
但是,我想获取用户的名称,它自然位于users
表'name'
字段。
顺序
public function user() {
return $this->belongsTo('User');
}
public function revisions() {
return $this->hasMany('Revision');
}
修订
public function order() {
return $this->belongsTo('Order');
}
用户
public function orders() {
return $this->hasMany('Order');
}
public function revisions() {
return $this->hasMany('Revision');
}
为了快速输入原因,我将其表示为JS对象......
orders = [
{ id: 5,
user: {....},
revisions: [
{ id:100,
operation: 'Creation',
text: 'Please provide soon',
user: 'John Doe' // Here I got the name instead of a user_id
}
]
},
{...}
]
我该如何完成?
我在每个模特都做了正确的关系设置。
答案 0 :(得分:3)
好吧,你在user_id
得到revisions
,因为它是修订本身的属性,你应该在Order
对象中查找用户名
$x = Order::with(array('user' => function ($query) {
$query->select('id','name');
}), 'revisions' => function ($query) {
$query->select('id','created_at','user_id','operation','text');
})->get();
var_dump($x->user->name);
$x->user
是关系模型,user->name
是其属性
所以,要在revision
中使用它,你必须做类似的事情:
$x->each(function(&$order) {
$order->revisions->each(function(&$rev) use ($order) {
$rev->setUsername($order->user->name);
});
});
假设您的setUsername
模型中有relation
方法。在任何情况下,username
模型中的relation
应该是私有属性,而不是可填充字段,因为它不是表的一部分,在这种情况下,您必须检查它是否在您导出时做一个->toJson()