Php Doctrine2-(如何)获取与main关联的对象

Php Doctrine2-(如何)获取与main关联的对象,php,orm,doctrine,doctrine-orm,Php,Orm,Doctrine,Doctrine Orm,假设我在Doctrine2中有一个关联映射 如何定义在查询主对象时需要获取所有关联对象 实际上,如果我定义(Main 1-*Sub),然后访问Sub集合中的所有项,Doctine将执行单个DB请求来获取每个子对象。我需要在主查询(联接)中检索子对象 评论或(最好是RTMs欢迎)如果您经常需要(即始终获取所有关联),请声明您的关联。有关详细信息,请参阅第17-19章 如果您只在几段代码中需要它,请使用DQL查询它们()。这样,您必须指定所有关联 $query = $em->createQue

假设我在Doctrine2中有一个关联映射

如何定义在查询主对象时需要获取所有关联对象

实际上,如果我定义(Main 1-*Sub),然后访问Sub集合中的所有项,Doctine将执行单个DB请求来获取每个子对象。我需要在主查询(联接)中检索子对象


评论或(最好是RTMs欢迎)

如果您经常需要(即始终获取所有关联),请声明您的关联。有关详细信息,请参阅第17-19章

如果您只在几段代码中需要它,请使用
DQL
查询它们()。这样,您必须指定所有关联

$query = $em->createQuery("SELECT u, a FROM User u JOIN u.address a WHERE a.city = 'Berlin'");
$users = $query->getResult();
如果要经常使用该查询,最好将其封装在Entity类中(简单,但不是最佳解决方案),或者为实体创建一个查询(稍微复杂一点,但这是“正确的方法”)。

public function getUsersFromCity($city): Collection
{
  return $this->createQueryBuilder('u')
    ->leftJoin('u.address', 'a')
    ->addSelect('a')
    ->andWhere('a.city = :city')
    ->setParameter('city', $city)
    ->getQuery()
    ->getResult()
  ;

}