按标签、多对多关系查找所有文章



问题

我在教义中有一个Article实体,它与Tag具有多对多关系。也就是说,一个Article可以用多个标签"标记",它们通过数据库中的articles_tags表绑定在一起。

假设我们想找到与给定Tag相关的所有Article。举个例子,假设我们想找到与"cars"标签相关的所有Article:一篇关于汽车的文章。

DQLSQL相对

如果这是常规的SQL(或它的某种风格(,我会以类似于以下内容的方式编写查询:

SELECT * FROM articles_tags WHERE tag_id IN (
SELECT id FROM tags WHERE name = 'cars')

这将使我们所有人都article_tags有一个名为"汽车"的Tag。当然,如果一次在查询中使用多个标签,也应该丢弃重复的文章:也许通过使用GROUP BY。此外,您甚至可以通过编写更长的查询来摆脱首先选择article_tags然后转到Article的中间步骤。

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

任何关于我应该从哪里开始编写查询的指示,或者关于一般如何在 ORM 中处理这些类型的数据库检索的任何信息,例如Doctrine,都将非常有帮助!

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()
;

相关内容

  • 没有找到相关文章

最新更新