gpt4 book ai didi

php - 如何使用 Eloquent 从嵌套关系中加载特定字段?

转载 作者:行者123 更新时间:2023-12-02 00:01:32 25 4
gpt4 key购买 nike

我有一个 Order 模型,属于 User 并具有 Revision

当我尝试加载订单时,包括:来自其用户的 '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
}
]
},

{...}
]

我怎样才能完成这个?

注意

我对每个模型都进行了正确的关系设置。

最佳答案

好吧,您在 revisions 中获得 user_id 因为它是 revision 本身的属性,您应该在 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 是其属性

因此,要将其包含在修订版中,您必须执行以下操作:

$x->each(function(&$order) { 
$order->revisions->each(function(&$rev) use ($order) {
$rev->setUsername($order->user->name);
});
});

假设您的 relation 模型中有一个 setUsername 方法。无论如何,关系模型中的用户名应该是私有(private)属性,而不是可填充字段,因为它不是表的一部分,在这种情况下,您必须检查如果在执行 ->toJson()

时将其导出

关于php - 如何使用 Eloquent 从嵌套关系中加载特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29264306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com