Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 29.03.2018 19:22:39

Eloquent ORM, хочу грамотно запросить данные

Laravel 5.6.
Есть четыре таблицы: Templates, Items, Orders и Item_order.

Templates и Items связывает отношение один-ко-многим (элементы items наследуют шаблоны templates).
Orders и Items - многие-ко-многим.

Поля в таблицах (id не стал писать):
Templates { name };
Items { template_id, size, price };
Orders { status };
Item_order { order_id, item_id, items_count };

Задача вывести JSON-массив всех заказов вида:

[
{ "status" : 0,
   "items" : [
       {"name":"Пицца foo", "size":"30см", "price":200, "count":2},
       {"name":"Ролл bar", "size":"100гр", "price":300, "count":1}
    ]
},
{ "status" : 1,
   "items" : [
       {"name":"Пицца foo", "size":"40см", "price":300, "count":3}
    ]
}
]

Сейчас я это делаю строкой
\App\Order::with('items.template')->get();
но получаю вложения .."items": [{... , "template":{....}}, {... , "template":{....}},]
и не знаю, как вставить поле "count" из pivot-таблицы.

Использовать большой конструктор запросов?
Помогите, пожалуйста

Не в сети

#2 31.03.2018 11:17:20

Re: Eloquent ORM, хочу грамотно запросить данные

Нашёл решение. Просто дорабатываю массив ручками, используя foeach.

//форматируем массив
        foreach ($orders as $order){
            foreach ($order->items as $item){
                $item->name=$item->template->name;
                $item->count=$item->pivot->items_count;
                unset($item->template);
                unset($item->pivot);
            }
        }

А данные из Pivot получил, прописав withPivot('items_count') при объявлении отношения в модели заказов.

Не в сети

Подвал раздела