gpt4 book ai didi

orm - Doctrine DQL QueryBuilder 排除存在关系的实体

转载 作者:行者123 更新时间:2023-12-02 00:21:46 25 4
gpt4 key购买 nike

我有两个实体

Order
oneToMany:
statuses:
targetEntity: \Status
mappedBy: order

Status
manyToOne:
order:
targetEntity: \Order
inversedBy: status
fields:
code:
type:integer

如您所见 - 一个订单一次可以有多个状态(例如“已发货”、“已付款”等状态)。

我想编写一个查询来获取所有状态不为 6 的订单。我发现很难理解这个问题。

假设我有三个订单。所有订单的状态均为“1”(新),其中一个订单的状态为“6”(审核中)。我只想检索状态不是 6 的两个订单。

像这样写查询..

$qb->select('o')
->from('MyOrderBundle:Order', 'o')
->innerJoin('o.statuses', 'st')
->where(
$qb->expr()->not(
$qb->expr()->eq('st.code', 6)
)
);

从生成的SQL中排除状态行6,但结果集中仍然包含顺序(因为code=1的状态行符合不等于6的条件)。我需要能够说“从我的结果集中排除任何具有像{something}这样的关联的实体”。有没有 DQL 关键字可以帮到我?

-在学说用户组上交叉发帖,如果我找到解决方案,将在这两个地方更新答案。

最佳答案

我最终找到了一种使用子选择来完成此操作的方法,感觉有点老套但我想不出任何其他方法(其中 6、7、8、9 是状态我想从我的结果集中排除)。

$qb->select('o')
->from('MyOrderBundle:Order', 'o')
->innerJoin('o.statuses', 'st')
->where(
$qb->expr()->notIn(
$qb2->select('DISTINCT(o2.id)')
->from('MyOrderBundle:Status', 'stat')
->innerJoin('stat.order','o2','WITH', $qb2->expr()->in('stat.code', (6,7,8,9)))->getDQL()
)
);

关于orm - Doctrine DQL QueryBuilder 排除存在关系的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10638926/

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