【发布时间】:2017-12-04 20:05:11
【问题描述】:
我在 Document 和 Tag 之间有一个多对多的关系。所以一个Document可以有多个Tags,一个Tag可以分配给不同的Document。
这是Tag
AppBundle\Entity\Tag:
type: entity
table: tags
repositoryClass: AppBundle\Repository\TagRepository
manyToMany:
documents:
targetEntity: Document
mappedBy: tags
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
label:
type: string
length: 255
unique: true
还有Document
AppBundle\Entity\Document:
type: entity
table: documents
repositoryClass: AppBundle\Repository\DocumentRepository
manyToMany:
tags:
targetEntity: Tag
inversedBy: documents
joinTable:
name: documents_tags
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
title:
type: string
length: 255
现在我想搜索所有带有标签animal 和fiction 的文档。我如何通过教义实现这一目标?
类似
$repository = $this->getDoctrine()->getRepository('AppBundle:Document');
$query = $repository->createQueryBuilder('d');
$query ->join('d.tags', 't')
->where($query->expr()->orX(
$query->expr()->eq('t.label', ':tag'),
$query->expr()->eq('t.label', ':tag2')
))
->setParameter('tag', $tag)
->setParameter('tag2', $tag2)
不会完成这项工作,因为它会返回具有tag1 或tag2 的所有文档。但是andX 也不行,因为没有一个标签可以同时拥有这两个标签。
【问题讨论】:
-
我认为你需要做一个子查询,看看这个答案:stackoverflow.com/questions/6637506/…