Благодарю за советы!
distinct использовать не удалось, но получился не сильно страшный по производительности, и главное рабочий запрос
$products = CatalogProduct::select('*')->from( DB::table('catalog_products') ->selectRaw('MAX(catalog_UID) AS catalog_UID, product_UID') ->whereIn('catalog_UID', $groupsArray) ->groupBy('product_UID') ) ->leftJoin('products', function ($join) { $join->on('products.UID', '=', 'product_UID') ->where('products.price', '>', 0); }) ->orderBy($sortField, $sortWay) ->paginate(12);
Посмотри на мою дату регистрации и подумай, нужна ли мне эта информация или нет?)
Теперь осталось разобраться со второй частью вопроса - как красиво отобрать все продукты в текущей и дочерних каталогах )
Пока сделано по старинке :
$groupsArray[] = $group->UID;$descendants = $group->descendants()->defaultOrder()->get();foreach ($descendants as $model) { $groupsArray[] = $model->UID;}$products = CatalogProduct::whereIn('catalog_products.catalog_UID', $groupsArray) ->leftJoin('products', 'products.UID', '=', 'catalog_products.product_UID') ->where('products.price', '>', 0) ->orderBy($sortField, $sortWay) ->get();
Оно конечно работает, но просто интересно, есть ли красивые решения. Ну и еще момент, при такой выборке возможны дубли продуктов, чего конечно бы не хотелось, нужно только первый.
Кирилл, спасибо за отклик. Удивительнейшим образом сегодня все заработало.
Все оказалось просто. Запрос был частью системы динамического роутинга каталога, очень похоже на вот этот пример (https://gtxtymt.xyz/blog/laravel-pages-from-database). Т.к. эту часть я делал достаточно давно, а потом на несколько месяцев забросил проект, то и воспоминаний о кешировании у меня не осталось =) Убрал ->with('products'), почистил кэш, подзапросы пошли.
hasManyThrough
с одним нюансом - в отладчике нет информации о запросе, которым это было сделано. Что тут за магия - я не могу понять.
отправь запрос по полному URL, что будет?
Если сомневаешься в путях, пропиши в инклюдах вывод имени текущего файла и сравни результат со своими ожиданиями.
Насколько детально не делай выкладки, но разбираться в этой каше по скринам врядли кто-то будет, сам ты это сделаешь куда быстрее.
При выполнении запроса со стороны сервера приходит ответ. На вкладке network смотри док, который приходит в ответ на запрос (тип xhr, видимо 12/ это он). Нажми на него и посмотри текст ответа. Вариантов громадное количество, посмотри что возвращается. А еще лучше измени js на
success: function (data) { console.log(data) if(data['success']){ $('#cartCntItems').html(data['cntItems']); $('#addCart_'+ itemId).hide(); $('#removeCart_'+ itemId).show(); } }
И смотри приходящие данные в консоли. Если это не json, в чем я уверен на 99%, то смотри что отдает сервер.
Хочу поблагодарить Алексея за очень качественно выполненную работу! Задача была весьма сложной, с кучей эффектов, состояний элементов - все было сделано на 5+. Особое внимание качеству кода - без нагромождения вложенных элементов и диких списков классов, просто и лаконично, а главное полностью совпадающее с визуализацией из ТЗ. По срокам слегка не уложились, но учитывая сложность проекта, это скорее ошибка оценки трудозатрат. Все правки были выполнены оперативно. Работа с ТС очень порадовала, однозначно рекомендую.
Когда брал маму на таобао 4 года назад, такие процы мне китаец в сокеты вместо заглушек вставил и отправил. Бесплатно.
Да, можно расходится. Горе-управленцы с горе-собственниками и горе-инвесторами про%али и кампанию, и клиентов, и свои деньги... Таких бизнес-партнеров в баню, очень показательный пример для всех, как они не умеют находить решения проблем.
PS Обе стороны.
Владельцы акций сбербанка могут унести банкомат домой, если стоимость его и его содержимого менее стоимости их акций?
Пока владельцем является юр.лицо, без соответствующих документов, актов приема-передачи, бухгалтерских проводок, действие по выносу оборудования в неизвестном направлении является банальной кражей.