【问题标题】:How to Access nth Child from Within the Parent Eloquent Model如何从父 Eloquent 模型中访问第 n 个孩子
【发布时间】:2020-09-15 08:45:04
【问题描述】:

我有 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。每个group 都有Items。请注意,Items 表定义了每个项目的itemamount/unitprice

这就是我想要的:

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

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

【问题讨论】:

标签: laravel laravel-5 eloquent eloquent-relationship


【解决方案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ūnas Pabrėža 之类的合并结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多