Doctrine orm 按标签查找所有文章,多对多关系 问题

Doctrine orm 按标签查找所有文章,多对多关系 问题,doctrine-orm,orm,doctrine,many-to-many,Doctrine Orm,Orm,Doctrine,Many To Many,我在条令中有一个文章实体,它与Tag有多对多关系。也就是说,一篇文章可以使用多个标记进行标记,它们由数据库中的articles_tags表绑定在一起 假设我们想要找到与给定标记关联的所有文章。对于一个例子,假设我们想找到所有与cars标签相关的文章:一篇关于汽车的文章 DQL与SQL相反 如果这是常规SQL或某种类型的SQL,我会以类似于以下的方式编写查询: SELECT * FROM articles_tags WHERE tag_id IN ( SELECT id FROM tags

我在条令中有一个文章实体,它与Tag有多对多关系。也就是说,一篇文章可以使用多个标记进行标记,它们由数据库中的articles_tags表绑定在一起

假设我们想要找到与给定标记关联的所有文章。对于一个例子,假设我们想找到所有与cars标签相关的文章:一篇关于汽车的文章

DQL与SQL相反 如果这是常规SQL或某种类型的SQL,我会以类似于以下的方式编写查询:

SELECT * FROM articles_tags WHERE tag_id IN (
    SELECT id FROM tags WHERE name = 'cars')
这将为我们提供所有的article_标签,其中有一个名为cars的标签。当然,如果一次在查询中使用多个标记,那么也应该抛出重复的文章:可能通过使用GROUPBY。此外,您甚至可以通过编写更长的查询来摆脱中间步骤,即首先选择article_标记,然后转到article

根据我目前对学说的理解,范围不超过几天,你不能直接引用中间表;似乎也不能使用DQL编写子查询。因此,我不知所措


任何关于我应该从何处开始编写查询的指针,或者任何关于如何在ORM(如条令)中处理这些类型的数据库检索的信息,都将非常有用

DQL中的查询比纯SQL简单一些:

$q = "
SELECT a FROM AppBundle:Article
LEFT JOIN a.tags t
WHERE t.name = :tag";

$result = $em->createQuery($q)
        ->setParameter('tag', $tag)
        ->getResult()
;