У меня есть проект, в котором я занимаюсь заказами клиентов.Некоторые из этих заказов осуществляются через 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%')"
У кого-нибудь есть понимание?Или способ справиться с этим, или хотя бы подтверждение того, что это невозможно сделать таким образом?