gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:03:20 27 4
gpt4 key购买 nike

我有一个处理客户订单的项目。其中一些订单是通过 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com