Doctrine2 - (如何)使用main获取关联对象

时间:2011-09-01 09:57:05

标签: php orm doctrine doctrine-orm

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

如何定义我需要获取所有关联对象,同时查询主要对象?

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

评论或(最好)Doctrine RTM欢迎)

2 个答案:

答案 0 :(得分:3)

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

如果只需要几段代码就可以使用它 - 请使用DQL对它们进行查询(manual)。这样您就必须指定所有关联。

$query = $em->createQuery("SELECT u, a FROM User u JOIN u.address a WHERE a.city = 'Berlin'");
$users = $query->getResult();

如果您打算经常使用该查询,最好将其封装在Entity类中(简单但不是最佳解决方案),或者为实体创建Repository(更多涉及,但这是“正确的方式”)。

答案 1 :(得分:0)

用户存储库

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

}