php - 学说 2 : Polymorphic Queries: Searching on properties of subclasses

标签 php doctrine-orm

我有一个处理客户订单的项目。其中一些订单是通过 Amazon.com 发出的。所以我有一个 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();

我不知道如何添加一个条件,大致说“或(订单是一个 AmazonOrder AND AmazonOrderId LIKE '$userQuery%')”

有没有人有什么见解?有什么办法可以解决这个问题,或者至少可以确认这种方法不可行?

最佳答案

这是另一个适用于 Doctrine 2.4 的解决方案:

$qb->select('o')
   ->from('Order', 'o')
   ->leftJoin('AmazonOrder', 'ao', 'WITH', 'o.id = ao.id')
   ->andWhere('o.id like :query or ao.amazonOrderId like :query')
   ->setParameter('query', $someQuery);

您只需将实体左联接到其自身的特定子类上。 (您可以根据您的用例调整我的简单查询。)

我只试过一次,但它似乎有效。

关于php - 学说 2 : Polymorphic Queries: Searching on properties of subclasses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7720138/

相关文章:

javascript - 通过ajax发送的表单的html,jquery自动为其添加结束标记,所以现在表单不起作用

php - 如何使用 Doctrine Criteria 过滤掉数组属性?

php - Symfony 3 找不到 pdo_mysql 驱动程序

php - 如何从 XML 文件中提取所有标签及其子标签?

php - PDO 类的通用插入方法

javascript - 如何动态创建一个新的div?

php - PHP 7.4+ 中的 "Typed property must not be accessed before initialization"错误

symfony - 使用 TWIG 从数据库中检索到的外部 URL 的超链接

php - 如何在 Doctrine2 (Symfony2) 中按案例排序

javascript - 如何对未注册用户隐藏图像