У меня есть проект, в котором я работаю с заказами клиентов. Некоторые из этих заказов делаются через Amazon.com. Итак, у меня есть сущность Order и сущность AmazonOrder, которая ее расширяет. Одна вещь, добавленная AmazonOrder, - это AmazonOrderId.
Мне нужно реализовать функцию широкого поиска. Пользователь может вводить некоторые данные в текстовое поле и использовать их в группе выражений в одном большом предложении where. Так, например, если пользователь искал "111", результаты будут включать любые заказы с идентификатором, начинающимся с 111, любой заказ, отправленный на почтовые индексы, начинающиеся с 111, любой заказ, отправленный на "111 Main St" и т. Д. .
Это реализовано с помощью запроса, созданного построителем запросов, который имеет большое выражение orX ()
.
Теперь я хотел бы сопоставить все заказы, но если они являются AmazonOrder, также сопоставьте с AmazonOrderId.
И я застрял - подозреваю, что это может быть невозможно.
Вот как я строю запрос:
$qb->select('o,s')->from('PMS\Entity\Order', 'o');
$qb->leftJoin('o.shippingInfo','s');
$qb->andWhere('o.status = :status');
$qb->setParameter('status',$status);
$qb->andWhere(
$qb->expr()->orX(
$qb->expr()->like('o.id',':query')
$qb->expr()->like('s.address',':query')
$qb->expr()->like('s.city',':query')
)
);
$qb->setParameter('query',$userQuery .'%');
$orders = $qb->getQuery()->getResult();
И я не могу понять, как добавить условие, которое примерно говорит: «ИЛИ (Заказ - это AmazonOrder И AmazonOrderId КАК '$ userQuery%')»
У кого-нибудь есть понимание? Либо способ справиться с этим, либо, по крайней мере, подтверждение того, что это невозможно сделать?