假设我在Doctrine2中有一个关联映射。
如何定义我需要获取所有关联对象,同时查询主要对象?
实际上,如果我定义(Main 1- * Sub)然后访问Sub集合中的所有项目,Doctine将执行单个DB请求以获取每个Sub对象。我需要在主查询(JOIN)中检索Sub对象。
评论或(最好)Doctrine RTM欢迎)
答案 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()
;
}