Doctrine 2,ManyToMany搜索

时间:2013-04-24 19:54:22

标签: doctrine-orm dql

我有2个与ManyToMany关系链接的Doctrine表。

表:条目

TabLe:tags

我希望能够找到与我输入的每个标签匹配的多个或一个标签的条目。

Ex:En条目“foo”的标签为“1”和“2”。如果我尝试通过标签“1”查找每个条目,我会找到此条目,如果我再次搜索“1”和“2”,我会再次找到它,但如果我添加搜索标签“3” ,那么价值就不匹配了。

到目前为止,我已经找到了一些使用OR实现此类操作的简单方法,但它并没有给我我想要的结果,我真的不知道如何使用Doctrine 2进行这种搜索。 / p>

Normaly我会使用关系表来做到这一点,但我不知道它是否可能在Doctrine下。

1 个答案:

答案 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")   

这将按照匹配的标签数量的顺序返回结果,但我没有对其进行测试。