1

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

表:条目

表:标签

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

例如:条目“foo”有标签“1”和“2”。如果我尝试通过标签“1”查找每个条目,我会找到这个条目,如果我再次搜索“1”和“2”,我会再次找到它,但如果我添加对标签“3”的搜索,则该值不匹配。

到目前为止,我已经找到了一些简单的方法来使用 OR 来实现这样的事情,但它并没有给我想要的结果,而且我真的不知道如何使用 Doctrine 2 进行这种搜索。

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

4

1 回答 1

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

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

于 2013-04-25T15:31:13.353 回答