原则:多对多查询给出不完整的结果



好的,我得到了三个表'文章'、'标签'和'articles_tags',前两个表之间有多对多关系。

现在我正在尝试查询"查找带有 ID 为 3 标签的所有文章">

我一直在尝试这个:

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

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

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

不是最漂亮的

$query = $em
            ->createQueryBuilder()
            ->select("a")
            ->from("ModelsArticle", "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("ModelsArticle", "a")
            ->where("a.id IN (:articles)")
            ->setParameter("articles", $articles)
            ->getQuery();
return $query->getResult();

相关内容

  • 没有找到相关文章

最新更新