我对关于条件ON的理论有一个问题。我读过here的文章:
现在在教义2中,我从来没有见过可以使用ON的情况。事实上,使用ON总是以一个异常结束,您应该使用它。
但我需要重新定义连接条件。以下是我的疑问:
$qb = $this->createQueryBuilder('fu');
$qb
->addSelect('cra')
->innerJoin('fu.chatRoomAdmins', 'cra')
->where('cra.operator = :operatorId')
->setParameter('operatorId', $operatorId);
$foreignUsers = $qb->getQuery()->getResult();下面是生成的sql查询(重要的部分)(我更改了表的名称以提高可读性):
SELECT *
FROM fu
INNER JOIN cra
ON fu.id = cra.operator_id
WHERE ( cra.operator_id = 'an_id');但我需要将ON条件更改为:ON fu.id = cra.operator_id OR cra.operator_id IS NULL
如果我像这样使用WITH条件:
$qb
//..
->innerJoin('fu.chatRoomAdmins', 'cra', 'WITH', 'cra.operator IS NULL')
//..
$foreignUsers = $qb->getQuery()->getResult();它将我的查询更改如下:
SELECT *
FROM fu
INNER JOIN cra
ON fu.id = cra.operator_id
AND ( cra.operator_id IS NULL )
WHERE ( cra.operator_id = 'an_id' ); 但是我想要这个ON条件:ON fu.id = cra.operator_id OR ( cra.operator_id IS NULL )
这就是为什么我试图在我的WITH中用ON替换queryBuilder的原因:
$qb
//..
->innerJoin('fu.chatRoomAdmins', 'cra', 'ON', 'cra.operator IS NULL')
//..
$foreignUsers = $qb->getQuery()->getResult();但是现在我遇到了一个错误:Expected end of string, got 'ON' (我正在使用symfony 4)
您知道有一种方法可以实现ON条件:ON fu.id = cra.operator_id OR ( cra.operator_id IS NULL )吗?
发布于 2019-12-21 21:05:54
我找到了一种使用leftJoin的方法:
$qb = $this->createQueryBuilder('fu');
$qb
->addSelect('cra')
->leftJoin('fu.chatRoomAdmins', 'cra')
->where('cra.operator = :operatorId OR cra.operator IS NULL');
$foreignUsers = $qb->getQuery()->getResult();它提供了以下SQL:
SELECT *
FROM fu
LEFT JOIN cra
ON fu.id = cra.operator_id
WHERE ( cra.operator_id = 'an_id'
OR cra.operator_id IS NULL ); 发布于 2022-06-01 11:05:14
它是这样工作的
$query->innerJoin('App\Domains\Order\Domain\Models\Order\B2bOrderExt', 'b2b', \Doctrine\ORM\Query\Expr\Join::WITH, 'o.id=b2b.orderId');https://stackoverflow.com/questions/59439476
复制相似问题