Как получить доступ к n-му потомку из родительской модели красноречия - PullRequest
0 голосов
/ 28 мая 2020

У меня есть 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 определяет 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 Ответ

1 голос
/ 28 мая 2020

Возможно, такая идея поможет?

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

        return collect($items);
    }
}

Если вы хотите получить подробную информацию о счете, сгруппировать его по элементам, вы можете использовать результат слияния, как предложил Рамунас Пабрежа в ссылке.

...