【发布时间】:2015-09-26 12:00:13
【问题描述】:
我有 4 个表,实体中的属性都进行了相应的映射。我正在尝试根据选定的标签查询文章。
articles => id, title, author_id - NAMESPACE AppBundle/Enity/Article
tags => id, name - NAMESPACE AppBundle/Entity/Tag
article_tags => article_id, tag_id
authors=> id, name - NAMESPACE AppBundle/Entity/Author
我已经弄清楚如何在 article_tags 表中获取所有标签具有与其相关的 id 的文章,并按作者 id 进行过滤。在 SQL 中,我的查询看起来像这样。经过测试并且可以正常工作。
SELECT
articles.title, articles.id, authors.name
FROM
article_tags
INNER JOIN tags
ON article_tags.tag_id = tags.id
INNER JOIN articles
ON article_tags.article_id = article.id
INNER JOIN authors
ON authors.id = articles.author_id
WHERE
tags.id IN (1,2)
我正在尝试构建一个代表上述 sql 的查询。到目前为止,我的理解是,学说会根据实体中的 ORM 断言自动选择所需的关联。但是我不确定如何将其他实体带入查询。这是我目前所拥有的。
我在文章 repo 中的代码是:
$qb = $this->createQueryBuilder('ar')
->select('ar.title, ar.id, au.name')
->from('article_tags', 'at')
->innerJoin('tags', 't', 'WITH', 'at.tag_id = t.id')
->innerJoin('ar', 'WITH', 'at.article_id = ar.id')
->innerJoin('authors', 'au', 'WITH', 'au.id = ar.author_id')
->where('at.id IN (1,2)');
return $qb->getQuery()->getResult();
我已经用“ON”和“WITH”关键字尝试了上面的代码。
我的错误是: [语义错误] line 0, col 76 near 'tags t WITH at.tag_id': Error: Class 'tags' is not defined.
【问题讨论】:
标签: php mysql symfony doctrine