在Doctrine2中使用DQL,如何仅选择产品及其标签仅适用于具有特定标签的产品



我有一个简单的数据模型: Product可以具有许多 Tag对象。

标签模型具有tag字段和value字段,两个字符串(在这里值不重要)。

以下DQL查询使我所有产品及其标签:

SELECT p, t FROM Product p LEFT JOIN p.tags t

但是,如何仅选择具有特定标签的产品(例如"蓝色")?重要的是要获得返回产品的所有标签,所以我不能简单地做WHERE t.tag = 'blue'

作为附带问题;您是否对使用单独的标签表进行实施,然后让产品标签表编织它们是否更好(适当的关系)?

,您是否有任何想法?

您可以使用这样的DQL查询:

"SELECT p, t FROM Product p LEFT JOIN p.tags t WHERE p.id IN (
    SELECT sp.id FROM Product sp INNER JOIN sp.tags st WHERE st.tag = 'blue'
)"

这将返回所有产品对象,其中在其标签集合中找到了Tag.tag = 'blue',但也加入了其他标签。

我在Symfony2项目中尝试了一下,它是这样的。因为我从学说文档中获得了所有用于此信息的信息,所以我认为它也可以在独立版本中使用。

如果它不起作用,请告诉我错误,我会仔细研究这个问题。

相关内容

  • 没有找到相关文章

最新更新