我有一个项目,我处理客户订单。其中一些订单是通过Amazon.com制作的。所以我有一个Order实体和一个扩展它的AmazonOrder实体。 AmazonOrder添加的一件事是AmazonOrderId。Doctrine2:多态查询:在子类的属性上搜索
我有要求实施广泛的搜索功能。用户可以在文本框中输入一些东西,并在一个大的where子句中用于一堆表达式。因此,例如,如果用户搜索“111”,则结果包括任何具有以111开头的ID的订单,任何订单被发送到以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 LIKE' $ userQuery%')”
任何人有任何见识?要么处理这个问题的方法,要么至少证明这样做是不可行的?
即使对于具有复合键的实体,它也可以很好地工作。 – Wilt
如果我可以再次投票这个答案,我会做到这一点! – Wilt
感谢您的支持!在DQL记录中: SELECT o FROM Order LEFT JOIN AmazonOrder ao WITH o.id = ao.id – omgitsdrobinoha