товары (id, name, price, category_id). с учетом пагинации (limit, offset) мне нужно забрать в один вывод и одно, и другое, вопрос, как мне это сделать?) спасибо. я вот только в сторону union all смотрю, только выбрать нужно будет и в одном запросе и в другом id, name.. если я правильно мыслю, то как мне отличить в таблице их ? хочу на vue отдать json'ом..
зачем? чем relation не устроил, зачем мешать белое с черным в твоем случае будет построитель запроса, если ты связи прописал как в документации: $products = Product::query()->with(['category'])->paginate() вот и весь твой построитель запроса, будет два запроса в базу один на получение продуктов, второй на получение категорий
мешать белое с черным - в категории могут быть как категории, так и товары. поэтому мне нужен вывод этого всего. Ну я буду обращаться $products->category, а мне нужно, чтобы это все лежало одной структурой в одной переменной
категория не есть продукт категории будут выведены отдельно от продуктов, зачем их выбирать через union? ну если хочется то выбирай select id, name, category as type from categories union select id, name, product as type from products type и есть то определение где что ... но еще раз подумай, это ли тебе нужно
закладываешь категории как nestedset: https://github.com/lazychaser/laravel-nestedset а потом товары выбираешь, как Product::query()->whereIn('category_id', Category::query()->select('id')->where(...))->paginate()
спасибо, почитаю!)
nested sets — очень такое себе: на небольших объёмах ещё как-то приемлемо, но потом вставка-удаление понемногу начинают превращаться в кошмар, и чем дальше, тем хуже =) простейшая структура дерева как у тебя — adjacency list — и рекурсивный запрос будут работать очень быстро. SELECT * FROM categories cat CROSS JOIN LATERAL ( WITH RECURSIVE tree AS ( SELECT cat.cat_id AS cat_id UNION ALL SELECT c.cat_id FROM tree t, categories c WHERE c.cat_parent = t.cat_id ) SELECT cat_id FROM tree ) tree INNER JOIN products prd USING(prd_id) WHERE cat_parent IS NULL как-то так, но лучше всего сделать функцию categories_children_id(root INT) и утащить рекурсивный запрос туда. эта функция много где пригодится, когда с категориями работать будешь
сложно :) попытаюсь разобраться :) спасибо!
не сложнее, чем разобраться как работают nested sets =)
😊 понял)
Обсуждают сегодня