如何使用 Doctrine QueryBuilder 或 EntityManager 通过多对多相关实体查找实体

Posted

技术标签:

【中文标题】如何使用 Doctrine QueryBuilder 或 EntityManager 通过多对多相关实体查找实体【英文标题】:How to find an entity by a many to many related entity with Doctrine QueryBuilder or EntityManager 【发布时间】:2015-03-05 17:52:46 【问题描述】:

我有两个实体:商店和用户。它们通过 StoreUser 连接表具有多对多关系。需要明确的是,除了关系数据之外,连接表中没有存储任何内容。

我已经创建了 Store 和 User 实体,并在这些实体中设置了所有关系元数据。

我现在正试图找出最简单的方法来搜索分配给特定用户的所有商店。在我的商店存储库中,我有一个findAllByUser(User $user),我正在尝试构建一个查询以根据传入的用户返回商店列表。

编写以下类型的查询的最简单方法是什么:

选择 * FROM store 加入store_user 开启store_user.store_id = store.id 在哪里store_user.user_id = 100001;

我应该提一下,如果可能的话,我会尽量避免需要为 StoreUser 创建实体。

提前致谢!

【问题讨论】:

【参考方案1】:

您可以使用 DQL 完成它:

$query = $this  ->getEntityManager()
                ->createQueryBuilder()
                ->select('s')
                ->from('AcmeAcmeBundle:Store', 's')
                ->leftJoin('AcmeAcmeBundle:StoreUser', 'su', 'WITH', 'su.store_id = s.user_id')
                ->where('su.user_id = :id')
                ->setParameter('id', 100001)
                ->getQuery();

    $result = $query->getResult();

【讨论】:

如果我没有生成 StoreUser 实体,这会起作用吗?

以上是关于如何使用 Doctrine QueryBuilder 或 EntityManager 通过多对多相关实体查找实体的主要内容,如果未能解决你的问题,请参考以下文章

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

Zend+Doctrine2:如何使用 ArrayCollections() 正确刷新实体?

如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射

如何使用 Doctrine 查询 NOT NULL?

如何在 Doctrine 中使用 findBy() 对结果进行排序

如何在 Doctrine 2 DQL 中使用 now()?