Я работаю над проектом с использованием Symfony 2.7
и Doctrine
. Проект управляет различными сущностями: Один User
может иметь любое количество Orders
, которые включают в себя один или несколько OrderItems
.Передает несколько правил SELECT в один запрос DQL
Теперь я хотел бы включить компонент обмена сообщениями, который позволяет автоматически отправлять электронные письма пользователям. Каждое сообщение имеет свой собственный набор Rules
, который указывает Users
, который должен получить сообщение.
Пример:
- Все
Users
Users
с номером пользователя между X и YUsers
с LastName "Доу"Users
, которые имеют по крайней мере одинOrder
Users
, которые имеют aOrder
сOrderItem
XYUsers
что имеютOrder
, который не оплатил- т.д.
вопрос: Можно ли перевести все правила сообщения в один единый DQL запрос на выборку?
Объединяя правила, которые только эффект, который User
в один запрос не является проблемой:
public function getMatchingUsers($rules) {
$qb = $this->em->createQueryBuilder();
$qb_expense->select('u')
->from('AppBundle:User', 'u');
foreach ($rules as $rule) {
$property = $rule->getProperty();
$operator = $rule->getOperator(); // --> =, !=, <, >, <= or >=
$value = $rule->getValue();
switch ($property) {
case ($property == UserMessage::FUNC_USER_NO): {
$qb
->andWhere('u.userNo :operator :value')
->setParameter('operator', $operator)
->setParameter('value', $value);
break;
}
case ($property == UserMessage::FUNC_NAME): {
$qb
->andWhere('u.name = :value')
->setParameter('value', $value);
break;
}
...
}
}
...
}
Но как добавить/включить правила, которые в силу при User
но его Orders
или даже OrderItems
?
Проблема заключается в том, что различные правила будут требовать различных запросов (простой ВЫБРАТЬ, ВЫБРАТЬ с JOIN, COUNT Заказов и т.д.)
Это решаемая только в одном запросе?