- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Начинаю окунаться в лару, никак не могу понять, как мне сделать следующее:
Три таблицы:
catalogs
catalog_product
product
Продукт может принадлежать нескольким группам. Таблица catalog_product связующая.
Связь между catalogs и catalog_product не по первичному ключу, а по уникальному UID.
Имена полей в catalog_product catalog и product
Первичный ключ продукта - UID
1) Как правильно описать взаимосвязь через таблицу, для получения всех продуктов каталога?
2) Как получить все продукты текущего и дочерних каталогов (используется nested sets) ? Сейчас получаю не совсем красиво, через подготовку массива и whereIn
hasManyThrough
с одним нюансом - в отладчике нет информации о запросе, которым это было сделано. Что тут за магия - я не могу понять.
Кирилл, спасибо за отклик. Удивительнейшим образом сегодня все заработало.
Все оказалось просто. Запрос был частью системы динамического роутинга каталога, очень похоже на вот этот пример (https://gtxtymt.xyz/blog/laravel-pages-from-database). Т.к. эту часть я делал достаточно давно, а потом на несколько месяцев забросил проект, то и воспоминаний о кешировании у меня не осталось =) Убрал ->with('products'), почистил кэш, подзапросы пошли.
Посмотри на мою дату регистрации и подумай, нужна ли мне эта информация или нет?)
Теперь осталось разобраться со второй частью вопроса - как красиво отобрать все продукты в текущей и дочерних каталогах )
Пока сделано по старинке :
Оно конечно работает, но просто интересно, есть ли красивые решения. Ну и еще момент, при такой выборке возможны дубли продуктов, чего конечно бы не хотелось, нужно только первый.
Дублей можно избежать с помощью `distinct()`. Надо играться и смотреть итоговый запрос.
Обычно я в таких ситуациях сначала генерирую нужный SQL, а потом перетаскиваю его в ActiveRecord, если это необходимо. Так удобнее, чем возиться с магией эктиврекорда.
И в `whereIn` ты можешь подзапрос положить по типу `WHERE IN (SELECT id FROM ...)`. Тогда не придётся логику какую-то на php описывать. На малой нагрузке так будет ок, а на большой стоит смотреть на перфоманс, чтобы понимать какой из вариантов будет лучше отрабатывать.
PS. Отвратительный редактор сообщений, ещё и без поддержки маркдауна. Я сломал всё вокруг, но не смог оформить инлайн-код, поэтому пусть будет так, как я написал.
distinct
Благодарю за советы!
distinct использовать не удалось, но получился не сильно страшный по производительности, и главное рабочий запрос