我有2个与ManyToMany关系链接的Doctrine表。
表:条目
TabLe:tags
我希望能够找到与我输入的每个标签匹配的多个或一个标签的条目。
Ex:En条目“foo”的标签为“1”和“2”。如果我尝试通过标签“1”查找每个条目,我会找到此条目,如果我再次搜索“1”和“2”,我会再次找到它,但如果我添加搜索标签“3” ,那么价值就不匹配了。
到目前为止,我已经找到了一些使用OR实现此类操作的简单方法,但它并没有给我我想要的结果,我真的不知道如何使用Doctrine 2进行这种搜索。 / p>
Normaly我会使用关系表来做到这一点,但我不知道它是否可能在Doctrine下。
答案 0 :(得分:1)
不确定我是否理解,但试试这是否有效:
//class EntryRepository
public function yourFunction($tags)
{
return $this->createQueryBuilder("o")
->innerJoin("o.Tags", "t", "WITH", "t.name IN :tags")
->setParameter("tags", $tags)
...
}
这将返回在$ tags数组中至少包含一个标记的条目。如果这是你想要的,你也可以玩
->addSelect( "COUNT(t.id) as HIDDEN relevance")->groupBy("o.id")
->orderBy("relevance")
这将按照匹配的标签数量的顺序返回结果,但我没有对其进行测试。