gpt4 book ai didi

doctrine-orm - 学说2 : how to remove leftJoin part of QueryBuilder

转载 作者:行者123 更新时间:2023-12-04 04:50:46 28 4
gpt4 key购买 nike

我有一个很大的 QueryBuilder 可以像 this question 一样生成 sql .显然,所有这些 leftJoins 使我的查询爬行。

所以我想我只需要获取匹配它的 ID,然后附加

$ids = $cloneOfqb->select("o.id")->resetDqlPart("join")....->getResult() ;

return $qb->andWhere("o.id IN (:ids)")->setParameter("ids", $ids)

问题:

这会很好用,但 resetDqlPart("join")删除所有连接,包括 leftJoininnerJoin .我经常使用innerJoins,因为它使代码可读。有没有办法只重置 leftJoins 但保留 innerJoins?它不一定是 QueryBuilder 对象,它可以是像 Doctrine\ORM\Query 这样的 child 。如果需要。

最佳答案

无法仅重置某些连接。

我发现了一个小讨论 here ,并且建议的解决方案(尽管没有提供源代码)是覆盖 Doctrine 的 QueryBuilder.php 中的 resetDqlPart() 函数。

在该函数中转储 $this->_dqlParts['join'],连接的结构如下所示:(我的示例查询有一个内部连接和一个左连接,以及 'e'、'ed'、'eaf'是表别名)

array (size=1)
'e' =>
array (size=2)
0 =>
object(Doctrine\ORM\Query\Expr\Join)[666]
protected 'joinType' => string 'LEFT' (length=4)
protected 'join' => string 'e.date' (length=6)
protected 'alias' => string 'ed' (length=2)
protected 'conditionType' => null
protected 'condition' => null
protected 'indexBy' => null
1 =>
object(Doctrine\ORM\Query\Expr\Join)[654]
protected 'joinType' => string 'INNER' (length=5)
protected 'join' => string 'e.area_formativa' (length=16)
protected 'alias' => string 'eaf' (length=3)
protected 'conditionType' => null
protected 'condition' => null
protected 'indexBy' => null

关于doctrine-orm - 学说2 : how to remove leftJoin part of QueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471884/

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