0

doctrine2 クエリ ビルダーを使用して、この SQL を実装したいと思います。

SELECT c.*, COUNT(s.id) AS studentCount
FROM classes c
LEFT JOIN (
    SELECT * 
    FROM student_classes
    WHERE YEAR =  '2012'
) sc ON c.id = sc.class_id
LEFT JOIN students s ON sc.student_id = s.id
GROUP BY c.id

私はこれを試しましたが、うまくいきませんでした

$qb = $this->getEntityManager()
    ->getRepository('Classes')
    ->createQueryBuilder('c');
$qb->select('c.id AS id, c.name AS name, COUNT(s) AS studentCount');
$qb->leftJoin(
    $qb->select('sc1')
        ->from('StudentClasses', 'sc1')
        ->where('sc1.year = :year')
        ->setParameter('year', $inputYear), 
    'sc2'
);
$qb->leftJoin('sc2.students', 's');
$qb->groupBy('c.id');
return $qb->getQuery()->getScalarResult();

または、代わりにnativeSQLを使用する必要がありますか?

助けていただければ幸いです、ありがとう。

4

2 に答える 2

0

SELECT での JOIN は、DQL または QueryBuilder を使用する Doctrine2 ではサポートされていないようです。もちろん、ネイティブ クエリを試すこともできます。

ただし、あなたの質問に答えるために、SELECT で JOIN を作成する必要はないと思います。単純に、JOIN を実行StudentClassesし、WHERE に$year!に関する条件を追加します。WHERE句はそのために作られています。

于 2013-01-12T15:25:35.850 に答える