好的,我有三张桌子'文章','标签'和'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();
确实找到了正确的文章,但这些文章现在只显示有一个标签,即使它们还有更多。
我觉得我在某处犯了一个愚蠢的错误,或者选择了完全错误的方法,但我一直在盯着它,我似乎无法找到它。
答案 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();