好的,我得到了三个表'文章'、'标签'和'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();