学说:多对多查询给出了不完整的结果

时间:2018-01-19 19:27:27

标签: php doctrine-orm

好的,我有三张桌子'文章','标签'和'articles_tags',前两个之间有多对多的关系。

现在我正在尝试查询“找到包含ID为3的标签的所有文章”

我一直在尝试这个:

$query = $em
            ->createQueryBuilder()
            ->select("a", "t")
            ->from("Models\Article", "a")
            ->leftJoin("a.tags", "t")
            ->where("t.id = :tagid")
            ->setParameter("tagid", $_GET['id'])
            ->getQuery();
$articles = $query->getResult();

确实找到了正确的文章,但这些文章现在只显示有一个标签,即使它们还有更多。

我觉得我在某处犯了一个愚蠢的错误,或者选择了完全错误的方法,但我一直在盯着它,我似乎无法找到它。

1 个答案:

答案 0 :(得分:0)

不是最漂亮的

$query = $em
            ->createQueryBuilder()
            ->select("a")
            ->from("Models\Article", "a")
            ->join("a.tags", "t")
            ->where("t.id = :tagid")
            ->setParameter("tagid", $_GET['id'])
            ->getQuery();
$articles = $query->getResult();

// Because IN clause throw an exception with empty array
if(count(articles) === 0) {
   return [];
}

$query = $em
            ->createQueryBuilder()
            ->select("a")
            ->from("Models\Article", "a")
            ->where("a.id IN (:articles)")
            ->setParameter("articles", $articles)
            ->getQuery();
return $query->getResult();