2013-02-26 18 views
38

これは私のユーザの履歴を表示しようとしている私の機能です。このためには、ユーザーの現在のクレジットと彼のクレジット履歴を表示する必要があります。Doctrineで左結合を行うには?

これは私が何をしようとしていますものです:

public function getHistory($users) { 
    $qb = $this->entityManager->createQueryBuilder(); 
    $qb->select(array('a','u')) 
      ->from('Credit\Entity\UserCreditHistory', 'a') 
      ->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id') 
      ->where("a.user = $users ") 
      ->orderBy('a.created_at', 'DESC'); 

    $query = $qb->getQuery(); 
    $results = $query->getResult(); 

    return $results; 
} 

はしかし、私はこのエラーを取得する:

[Syntax Error] line 0, col 98: Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got 'ON'

編集:私が参加して 'WITH' と 'ON' に置き換え私が見るものは結合された列からの値が1つだけです。

答えて

80

あなたは(あなたの例から選んだ、のはCredit\Entity\UserCreditHistory#userを言わせて)ユーザーを指す財産上の関連性を持っている場合は、構文は非常に簡単です:

public function getHistory($users) { 
    $qb = $this->entityManager->createQueryBuilder(); 
    $qb 
     ->select('a', 'u') 
     ->from('Credit\Entity\UserCreditHistory', 'a') 
     ->leftJoin('a.user', 'u') 
     ->where('u = :user') 
     ->setParameter('user', $users) 
     ->orderBy('a.created_at', 'DESC'); 

    return $qb->getQuery()->getResult(); 
} 

あなたが参加に条件を適用しているので、結果はLEFT JOINまたは単にJOINと同じです。

私は両方試してみました
array(
    array(
     0 => UserCreditHistory instance, 
     1 => Userinstance, 
    ), 
    array(
     0 => UserCreditHistory instance, 
     1 => Userinstance, 
    ), 
    // ... 
) 
+0

は関係なしに/アプローチ:何の関連付けが利用できない場合

は、その後、クエリは次のような結果セットが生成されます

public function getHistory($users) { $qb = $this->entityManager->createQueryBuilder(); $qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin( 'User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id' ) ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC'); return $qb->getQuery()->getResult(); } 

これを次のようになります。 、あなたのコードに従って、私は結果セットを取得していることを示唆しているように関係との第一。しかし、私は結合された結果セットを見ることができません。 第2のアプローチ私はデータを取得していると言いたいのですが、正確に何を探していたのですか? –

+4

最初のクエリは 'User'オブジェクトが' User'オブジェクトを与えた 'UserCreditHistory'オブジェクトを与えます。 join(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#joins) – Ocramius

+0

非常に真実です。水和されているので、私は必要ですループバックして希望の値 –

関連する問題