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

时间:2015-03-05 17:52:46

标签: php mysql orm doctrine-orm doctrine

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

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

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

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

SELECT * FROM store
加入store_user store_userstore_id = storeidstore_useruser_id = 100001;

我应该提一下,我试图尽量避免为StoreUser创建一个实体。

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以使用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();