Doctrine2 - (如何)使用 main 获取关联对象
Posted
技术标签:
【中文标题】Doctrine2 - (如何)使用 main 获取关联对象【英文标题】:Doctrine2 - (how to) fetch associated objects with main 【发布时间】:2011-09-01 09:57:04 【问题描述】:假设我在 Doctrine2 中有一个关联映射。
如何定义在查询主要对象时需要获取所有关联对象?
实际上,如果我定义 (Main 1-* Sub) 然后访问 Sub 集合中的所有项目,Doctine 将执行单个 DB 请求以获取每个 Sub 对象。我需要在主查询 (JOIN) 中检索子对象。
欢迎评论或(最好)Doctrine RTM)
【问题讨论】:
【参考方案1】:如果您经常需要它(即始终获取所有关联),请声明您的关联 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
(涉及更多一点,但“正确的方式”)。
【讨论】:
【参考方案2】:用户存储库
public function getUsersFromCity($city): Collection
return $this->createQueryBuilder('u')
->leftJoin('u.address', 'a')
->addSelect('a')
->andWhere('a.city = :city')
->setParameter('city', $city)
->getQuery()
->getResult()
;
【讨论】:
以上是关于Doctrine2 - (如何)使用 main 获取关联对象的主要内容,如果未能解决你的问题,请参考以下文章
由 Doctrine2 (Symfony2) 生成的约束中的奇怪随机名称