私のウェブサイトの一部として、Symfony2 と Doctrine2 を使用してタグ付け (フォークソノミー) システムを作成しようとしています。
Doctrine Entitiesを作成するために、以下のドキュメントのテーブルとクエリの例に従っています。
MySQL クエリ (ドキュメントに記載) を Doctrine Query Builder クエリに変換しようとすると、innerJoins でエラーが発生します。以下の例:
ドキュメントからの MySQL クエリ:
SELECT tag_text
, COUNT(*) as num_tags
FROM Tag2Post t2p
INNER JOIN Tags t
ON t2p.tag_id = t.tag_id
GROUP BY tag_text;
私の Doctrine Query Builder クエリ:
$qb = $em->createQueryBuilder()
->select('t.tag_text, COUNT(*) as num_tags')
->from('CompanyWebsiteBundle:Tag2Post', 't2p')
->innerJoin('CompanyWebsiteBundle:Tags', 't', 'ON', 't2p.tag_id = t.id')
->groupBy('t.tag_text')
;
$tags = $qb->getQuery()->getResult();
エラーメッセージ:
[2/2] QueryException: [Syntax Error] line 0, col 112: Error: Expected Doctrine\ORM\Query\Lexer::T_WITH, got 'ON'
[1/2] QueryException: SELECT t.tag_text, COUNT(*) as num_tags FROM CompanyWebsiteBundle:Tag2Post t2p INNER JOIN CompanyWebsiteBundle:Tag t ON t2p.tag_id = t.id GROUP BY t.tag_text
データベースで直接 MySQL クエリを実行すると、動作します。