2017-12-12 18 views
0

Doctrineを使用して、オブジェクトといくつかの左結合のみを返したいと思います。Doctrine DQLは1対多に読み込みを停止します

しかし何らかの理由で、Doctrine(DQLを使用)はすべてのデータをロードし続けます。

class User { 

/** 
* @ORM\OneToMany(targetEntity="NAMESPACE\Entity\TeamUserGroup", mappedBy="user") 
* 
* @var array 
*/ 
protected $groups; 

} 

、その後、TeamUserGroupは再び多対1のがあります。

class TeamUserGroup { 

/** 
* @ORM\Id() 
* @ORM\ManyToOne(targetEntity="NAMESPACE\AuthBundle\Entity\User", inversedBy="groups") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) 
* 
* @var User 
*/ 
private $user; 

/** 
* @ORM\Id() 
* @ORM\ManyToOne(targetEntity="NAMESPACE\TeamBundle\Entity\Team", inversedBy="groups") 
* @ORM\JoinColumn(name="team_id", referencedColumnName="id", nullable=false) 
* 
* @var Team 
*/ 
private $team; 

} 

これは私のDQLです:

public function fetchUser() 
{ 
    $qb = $this 
     ->createQueryBuilder('s') 
     ->select('s') 
     ->andWhere('s.email=(:email)') 
     ->addSelect('groups')->leftJoin('s.groups', 'groups') 
     ->setParameter('email', $parameterBag['email']); 

    try { 
     return $qb->getQuery()->getOneOrNullResult(); 
    } catch (NonUniqueResultException $exception) { 
    } 

} 

とDoctrineがちょうどEVERY関連付けをロードするいくつかの理由があります。

だから私はこのような構造を持っている:

// User Object 
    // All my Groups 
     // All the Teams of that Group 
      // All the Users in that team ... 

は、私はこれをどのように停止することができます(私はちょうど私のオブジェクトを取得し、左ジョイン)。

// User Object 
    // All my Groups 

が高度にありがとう: これは私の希望の結果です。

+0

役立つことを願って、あなたの問題を解決するためにdoctrine partial objectsを使用することができます。 Symfony Profilerから実行されたSQLクエリは何ですか?熱心な読み込みの問題は、一般に、双方向の 'OneToOne'アソシエーションと逆の側に対するクエリがある場合にのみ発生します。 [[sic](https://github.com/doctrine/doctrine2/issues/4389)]、またはスクリプトがLazy Loadedフィールドを他の場所で呼び出していると、Lazy Loadedのときに別のデータベースクエリが表示されます。後で私はあなたの例を再現した場合です。 – fyrye

+0

提供されたコードで説明されている問題を再現できないため、この質問を閉じる投票。原因を正確に特定できるように、実際のコードから追加の文脈で質問を更新してください。 – fyrye

答えて

-1

たぶん、あなたは

More info here
は、私はこれは私が提供するコード例に基づいて、問題を再現することはできませんよ、あなた

+0

部分オブジェクトは、望ましくない熱心な 'team'エンティティが識別子の一部であるため、熱心な読み込みの問題を解決しません。関連する 'user'と' team'プロパティは 'partial'文が動作するように指定する必要があります。 – fyrye

関連する問題