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
が高度にありがとう: これは私の希望の結果です。
役立つことを願って、あなたの問題を解決するために
doctrine partial objects
を使用することができます。 Symfony Profilerから実行されたSQLクエリは何ですか?熱心な読み込みの問題は、一般に、双方向の 'OneToOne'アソシエーションと逆の側に対するクエリがある場合にのみ発生します。 [[sic](https://github.com/doctrine/doctrine2/issues/4389)]、またはスクリプトがLazy Loadedフィールドを他の場所で呼び出していると、Lazy Loadedのときに別のデータベースクエリが表示されます。後で私はあなたの例を再現した場合です。 – fyrye提供されたコードで説明されている問題を再現できないため、この質問を閉じる投票。原因を正確に特定できるように、実際のコードから追加の文脈で質問を更新してください。 – fyrye