如何从父母口才模型中访问第n个孩子

时间:2020-05-28 05:50:06

标签: laravel laravel-5 eloquent eloquent-relationship

我有4个表格及其相应的模型,如下所示:

//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。每个groupItems。请注意,Items表是定义item和每个项目的amount/unitprice的表。

这就是我想要的:

Application模型中,我想定义一个函数来返回Items。我尝试了以下方法:

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

1 个答案:

答案 0 :(得分:1)

也许这样的想法会有所帮助?

class Application extends BaseModel {
    ...
    public function billItems() {
        $items = [];
        $groups = $this->bill->groups()->get();
        foreach ($groups as $group) {
            $items[] = $group->items()->get();
        }

        return collect($items);
    }
}

如果您想获取账单,分组以及项目的详细信息,则可能希望使用链接中建议的RamūnasPabrėža之类的合并结果。