Tengo un proyecto donde trato con pedidos de clientes. Algunas de esas órdenes se realizan a través de Amazon.com. Así que tengo una entidad Order y una entidad AmazonOrder que la amplía. Una cosa añadida por AmazonOrder es el AmazonOrderId.Doctrine2: Consultas polimórficas: Buscando en las propiedades de las subclases
Tengo un requisito para implementar una función de búsqueda amplia. El usuario puede ingresar algunas cosas en un cuadro de texto y ser utilizado en un conjunto de expresiones en una gran cláusula-donde. Entonces, por ejemplo, si el usuario buscó "111", los resultados incluyen cualquier orden con una ID que comience con 111, cualquier orden que se envíe a códigos postales que comiencen con 111, cualquier orden que se envíe a "111 Main St", etc.
Eso se implementa con una consulta creado por query-builder que tiene una gran expresión orX()
.
Ahora, me gustaría hacer coincidir todos los pedidos, pero si son AmazonOrder, también coinciden con AmazonOrderId.
Y estoy atascado - Sospecho que puede no ser posible
Así es como estoy construyendo la consulta:
$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();
Y no puedo encontrar la manera de añadir una condición que dice, más o menos, "OR (Order es AmazonOrder AND AmazonOrderId LIKE '$ userQuery%')"
¿Alguien tiene alguna idea? ¿O una forma de manejar esto, o al menos una confirmación de que no es posible de esta manera?
Esto funciona bien incluso para entidades con claves compuestas. – Wilt
¡Si pudiera votar esta respuesta una vez más, lo haría! – Wilt
¡Gracias por esto! En DQL para el registro: SELECCIONAR o FROM Order LEFT JOIN AmazonOrder ao WITH o.id = ao.id – omgitsdrobinoha