У меня есть эта ситуация в моей модели:DQL-комплексный запрос в приложении Symfony2
Товар относится к категории. TransactionDetail имеет Продукт, цену и количество. Сделка была ТранзакцияДетали и дата. Магазин имеет транзакций. Группа имеет магазины.
Они являются объектами доктрины, и они должным образом связаны. (Я не вставляю классы, он слишком длинный).
Вещь - мне нужно запросить модель для получения общей проданной продукции (SUM TransactionDetail.quantity) и общих денег (SUM TransactionDetail.quantity * TransactionDetail.prize), сгруппированных по продукту, из транзакций продуктов определенной категории в определенной группе, которая произошла в нескольких датах.
Хорошо, я сделал это в простом SQL, и это было бы что-то вроде
select TransactionDetail.product, SUM(TransactionDetail.quantity) as quantity, SUM(TransactionDetail.quantity*TransactionDetail.prize) as euros
from TransactionDetail
left join Transaction
on TransactionDetail.transaction = Transaction.id
left join Product
on TransactionDetail.product = Product.id
left join Group
on Transaction.shop = Group.shop
where Product.category = :paramCategoryId
and Group.id = :paramGroupId
group by TransactionDetail.product
Вещи не я понятия не имею о том, как я кладу это в запросе DQL (как обычный SQL не рекомендуется, и я действительно хотел бы лучше понять возможности DQL).
Помогите мне, ребята?
Заранее спасибо.
================================================================================================================================== ===============================
EDIT:
Состояние искусства запроса:
SELECT d, p,
SUM(d.quantity) as quantity, SUM(d.quantity*d.prize) as euros
FROM TransactionDetail d
LEFT JOIN d.transaction t
LEFT JOIN d.product p
LEFT JOIN t.shop s
LEFT JOIN s.groups g
ON s.id MEMBER OF g.shops
WHERE p.category = :category
AND g.id = :group
AND t.date > :from
AND t.date < :to
GROUP BY p
Проблемы: s.groups - это коллекция, а также g.shops. Я не знаю, как в мире этот запрос должен быть выполнен.
haha, power of dql. это помогает много для простых запросов, вам не нужно выбирать *. – Florian
Lol. Наверное, ты не фанат. Но я уверен, что будет какой-то специалист, который просветит меня: P – gomman
просто ответил вам ниже :) после моего тролля. – Florian