170 похожих чатов

Добрый вечер! у меня есть категории (id, name, parent_id) и

товары (id, name, price, category_id). с учетом пагинации (limit, offset) мне нужно забрать в один вывод и одно, и другое, вопрос, как мне это сделать?) спасибо. я вот только в сторону union all смотрю, только выбрать нужно будет и в одном запросе и в другом id, name.. если я правильно мыслю, то как мне отличить в таблице их ? хочу на vue отдать json'ом..

9 ответов

5 просмотров

зачем? чем 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 =)

Михаил-Игнатов Автор вопроса

😊 понял)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта