我有两个实体
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()
)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)