@Romua1d

Как получить товар с последней ценой?

Условия: есть Product и есть ManyToOne Price (value, created_at, product_id)
Как в квери билдере собрать запрос, который выведет товары с ценой (последней по created_at)? На голом SQL он примерно такой
SELECT *,
       (
           SELECT id FROM price
           WHERE price.product_id = product.id
           ORDER BY created
           DESC LIMIT 1
       )
FROM product
  • Вопрос задан
  • 101 просмотр
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
Ответ по теме:
  • или сделайте поле lastPrice и храните последнюю цену там (ну или через кастомный гидратор ее в поле продукта вставляйте)
  • или выбирайте необходимые данные голым SQL/DQL в DTO объекты,
  • или на крайний — отдельно выбирайте последние цены для ваших товаров, но тут по сути некоторое подобие второго варианта


Получать последнюю цену в массив цен — некорректная и очень поганая задумка, даже если у вас получится сделать это. Вы получите "битый" бизнес-объект и вообще все это плохо и не удобно и не правильно.

Совет по запросу:
Лучше сделайте не вложенным запросом, а через джойн
SELECT product.*, last_prices.*
FROM product
LEFT JOIN (
     SELECT product_id AS id, max(id) as price_id
     FROM price
     GROUP BY product_id
) last_prices  ON last_prices.id=product.id
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы