如何从父 Eloquent 模型中访问第 n 个子模型
How to Access nth Child from Within the Parent Eloquent Model
我有4个table,对应型号如下:
//Table is applications
class Application extends BaseModel {
public function bill(){
return $this->belongsTo(Bill::class,'bill_id');
}
}
//Table is bills
class Bill extends BaseModel {
public function groups(){
return $this->hasMany(Group::class,'group_id');
}
}
//Table is groups
class Group extends BaseModel {
public function items(){
return $this->hasMany(Item::class,'item_id');
}
}
//Table is items
class Item extends BaseModel {
// some props
}
每个Application
有Bill
,然后分成Groups
。每个 group
有 Items
。请注意 Items
table 是定义每个项目的 item
和 amount/unitprice
的那个。
这就是我想要的:
我想在 Application
模型中为 return 项定义一个函数。我尝试了以下方法:
class Application extends BaseModel {
...
public function billItems()
{
return $this->with('bill.groups.items');
}
}
我最终得到的是:
"message": "\Application::billItems must return a relationship instance.",
"exception": "LogicException",
怎么了。我该怎么做才能让它工作?我正在使用 Laravel 5.7
也许这样的想法会有所帮助?
class Application extends BaseModel {
...
public function billItems() {
$items = [];
$groups = $this->bill->groups()->get();
foreach ($groups as $group) {
$items[] = $group->items()->get();
}
return collect($items);
}
}
如果您想获取账单的详细信息、分组和项目,您可能喜欢使用合并结果,例如 link 中建议的 Ramūnas Pabrėža。
我有4个table,对应型号如下:
//Table is applications
class Application extends BaseModel {
public function bill(){
return $this->belongsTo(Bill::class,'bill_id');
}
}
//Table is bills
class Bill extends BaseModel {
public function groups(){
return $this->hasMany(Group::class,'group_id');
}
}
//Table is groups
class Group extends BaseModel {
public function items(){
return $this->hasMany(Item::class,'item_id');
}
}
//Table is items
class Item extends BaseModel {
// some props
}
每个Application
有Bill
,然后分成Groups
。每个 group
有 Items
。请注意 Items
table 是定义每个项目的 item
和 amount/unitprice
的那个。
这就是我想要的:
我想在 Application
模型中为 return 项定义一个函数。我尝试了以下方法:
class Application extends BaseModel {
...
public function billItems()
{
return $this->with('bill.groups.items');
}
}
我最终得到的是:
"message": "\Application::billItems must return a relationship instance.",
"exception": "LogicException",
怎么了。我该怎么做才能让它工作?我正在使用 Laravel 5.7
也许这样的想法会有所帮助?
class Application extends BaseModel {
...
public function billItems() {
$items = [];
$groups = $this->bill->groups()->get();
foreach ($groups as $group) {
$items[] = $group->items()->get();
}
return collect($items);
}
}
如果您想获取账单的详细信息、分组和项目,您可能喜欢使用合并结果,例如 link 中建议的 Ramūnas Pabrėža。