2016-08-28 30 views
1

私のユーザエンティティは、彼のpostcommentsを連想すべての関連付けずにエンティティを選択するために、教義を得る

oneToMany: 
    images: 
     targetEntity: Image 
     mappedBy: user 
    posts: 
     targetEntity: Post 
     mappedBy: user 
     fetch: EXTRA_LAZY 
    postcomments: 
     targetEntity: Postcomment 
     mappedBy: user 
     fetch: EXTRA_LAZY 

私は彼のすべての記事や画像を特定のユーザーを選択したいのカップルを持っていますが、ありません。これは私が使用しているクエリです:

 $qb = $em->createQueryBuilder() 
     ->select(array('u', 'p', 'i')) 
     ->from('AppBundle:User', 'u') 
     ->leftJoin('u.posts', 'p') 
     ->leftJoin('u.images', 'i') 
     ->where('u.id = :id') 
     ->setParameter('id', $id); 

しかし、返される結果には他のすべての関連も含まれています。 uを選択して結合を削除するのと同じです。

結果に含まれる特定の関連付けのみを選択するにはどうすればよいですか?

は、ここで私はあなたが教義の遅延ローディング機能に惑わさていると思うのAPI呼び出し

public function getAction($id) 
{ 
    $em = $this->getDoctrine()->getEntityManager(); 

    $qb = $em->createQueryBuilder() 
     ->select(array('u', 'p', 'i')) 
     ->from('AppBundle:User', 'u') 
     ->leftJoin('u.posts', 'p') 
     ->leftJoin('u.images', 'i') 
     ->where('u.id = :id') 
     ->setParameter('id', $id) 
     ->getQuery(); 

    $users = $db->getOneOrNullResult(); 
    $view = $this->view($users); 

    return $this->handleView($view); 
}` 

答えて

1

の完全なコードです。あなたは

$user->getPostcomments(); 

を行うと、それはあなたのPostcommentのコレクションを返すとき

が、それはまだそれがユーザー自身と一緒にDBから取得してきたという意味ではありません。

ここでレイジーローディングが行われます。これは、このコレクションへの最初のアクセス試行時にロードされたことを意味します。あなたがそれを使うまで、実際には取り込まれません。 ;-)

デフォルトでは、Doctrineは上記のように動作するfetch: LAZYモードを設定します。いくつかの追加機能があるEXTRA_LAZYを使用しました。この場合、コレクション(またはスライス)の特定の要素にアクセスしようとすると、Doctrineはコレクション全体をロードせず、要求された要素またはサブセットのみをロードします(slice()メソッドを使用した場合)。それは時に便利ですが、パフォーマンスの問題の原因となることがあります。 LAZYEXTRA_LAZYの違いに注意する必要があります。

+0

claryfyingありがとうございます。しかし、私は$ qbの結果をjsonとしてapiに出力する必要があります。結合を追加するかどうかは関係ありません。常に関連するすべてのエンティティをユーザーに関連付けて出力するので、基本的には私はまだAppBundleからUserを選択するか、$ this-> getUser()を実行してjsonに出力しても、結果に他のすべての関連要素がありますこれはデータの巨大なセットであり、迷惑なものです。それで私の最初の質問は、どうやってこれを防ぐことができ、関連するものだけを選ぶことができますか? – Sangit

+0

jsonの応答の生成方法を示すコードを提供します。 –

+0

私は質問 – Sangit

関連する問題