Doctrine2: Полиморфные запросы: поиск свойств подклассов

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

У кого-нибудь есть понимание? Либо способ справиться с этим, либо, по крайней мере, подтверждение того, что это невозможно сделать?

14
задан timdev 11 October 2011 в 00:20
поделиться