使用Doctrine2中的DQL,如何仅为具有特定标记的产品选择产品及其标记?
我有一个简单的数据模型:一个使用Doctrine2中的DQL,如何仅为具有特定标记的产品选择产品及其标记?,doctrine,doctrine-orm,dql,Doctrine,Doctrine Orm,Dql,我有一个简单的数据模型:一个产品可以有许多标记对象 标记模型有一个标记字段和一个值字段,这两个字符串(此处值不重要) 以下DQL查询获取所有产品及其标记: SELECT p, t FROM Product p LEFT JOIN p.tags t 但是,如何仅选择具有特定标签(例如“蓝色”)的产品?获取返回产品的所有标记非常重要,因此我不能简单地执行操作,其中t.tag='blue' 作为附带问题;您是否认为使用单独的标记表来实现这一点更好,然后使用ProductTag表将它们编织在一起(适当
产品
可以有许多标记
对象
标记模型有一个标记
字段和一个值
字段,这两个字符串(此处值不重要)
以下DQL查询获取所有产品及其标记:
SELECT p, t FROM Product p LEFT JOIN p.tags t
但是,如何仅选择具有特定标签(例如“蓝色”)的产品?获取返回产品的所有标记非常重要,因此我不能简单地执行操作,其中t.tag='blue'
作为附带问题;您是否认为使用单独的标记表来实现这一点更好,然后使用ProductTag表将它们编织在一起(适当的多对多关系)?您可以使用如下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'
的所有产品对象,但也会连接其他标签
我在一个项目中尝试了这个方法,结果是这样的。因为我从中获得了所有用于此的信息,所以我认为它在独立版本中也会起作用
如果它不工作,告诉我错误,我会仔细研究这个问题