我有一个处理客户订单的项目。其中一些订单是通过亚马逊网站订购的。所以我有一个 Order 实体和一个扩展它的 AmazonOrder 实体。 AmazonOrder 添加的一件事是 AmazonOrderId。
我需要实现广泛的搜索功能。用户可以在文本框中输入一些内容,并在一个大的 where 子句中的一堆表达式中使用。因此,例如,如果用户搜索“111”,则结果包括 ID 以 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();
我不知道如何添加一个条件,粗略地说,“OR (Order is an AmazonOrder AND AmazonOrderId LIKE '$userQuery%')”
有人有任何见解吗?要么有一种方法来处理这个问题,或者至少确认这种方式不可行?