我试图加入symfony。我按照此处的说明Doctrine 2 - Outer join query和Symfony - Using Outer Joins with Doctrine ORM进行了尝试。
$query = $em->getRepository('AppBundle:raports')->createQueryBuilder('r')
->select('r')
->leftJoin('r.requestRaports rr WITH rr.formId = :formId', false)
->setParameter('formId', $requestId->getFormId())
->getQuery();
它给出了
SELECT
r0_.id AS id_0,
r0_.adminComment AS adminComment_1,
r0_.addDate AS addDate_2,
r0_.submitDate AS submitDate_3,
r0_.statusId AS statusId_4,
r0_.userId AS userId_5,
r0_.requestId AS requestId_6,
r0_.requestRaports AS requestRaports_7
FROM
raports r0_
LEFT JOIN request_raports r1_ ON r0_.requestRaports = r1_.id
AND (r1_.formId = ?)
当我尝试
时$query = $em->getRepository('AppBundle:raports')->createQueryBuilder('r')
->select('r')
->join('r.requestRaports rr WITH rr.formId = :formId', false)
->setParameter('formId', $requestId->getFormId())
->getQuery();
看起来像那样
SELECT
r0_.id AS id_0,
r0_.adminComment AS adminComment_1,
r0_.addDate AS addDate_2,
r0_.submitDate AS submitDate_3,
r0_.statusId AS statusId_4,
r0_.userId AS userId_5,
r0_.requestId AS requestId_6,
r0_.requestRaports AS requestRaports_7
FROM
raports r0_
INNER JOIN request_raports r1_ ON r0_.requestRaports = r1_.id
AND (r1_.formId = ?)
但我想要查询
SELECT * FROM
raports
r RIGHT JOIN request_raports rr ON r。requestRaports
= rr.id
如何在doctrine2中正确加入?
答案 0 :(得分:0)
您可以使用LEFT JOIN并像这样反转SQL
SELECT * FROM request_raports rr LEFT JOIN raports r ON r.requestRaports = rr.id
或者您可以创建自己的"右连接"。如果你看一下教条中的leftJoin定义,它就像:
leftJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null)
{
$parentAlias = substr($join, 0, strpos($join, '.'));
$rootAlias = $this->findRootAlias($alias, $parentAlias);
$join = new Expr\Join(
Expr\Join::LEFT_JOIN, $join, $alias, $conditionType, $condition, $indexBy
);
return $this->add('join', array($rootAlias => $join), true);
}
所以,它可能看起来像这样:
$qb = $this->createQueryBuilder('b');
$rightJoin = new Expr\Join('RIGHT', 'r.requestRaports', 'rr', Expr\Join::WITH, 'rr.formId = :formId');
$qb
->select('r')
->add('join', ['r' => $rightJoin], true)
...
我没有对此进行测试,也不知道它是否是最好的方法......