2016-12-15 9 views
0

私は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右ジョインrequest_raports rr ON r。 requestRaports = rr.id

doctrine2での右結合作業の方法は?あなたは、エーテルは、LEFTを使用することができます

答えて

0

はJOINと、この

SELECT * FROM request_raports rr LEFT JOIN raports r ON r.requestRaports = rr.id 

のようなあなたのSQLを逆転それとも、自分の「権利参加」あなたの作成することができます。あなたは教義に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) 
    ... 

私はこれをテストしていないとするならば、その最善の方法を知りませんそれをやろう...