Symfony2のcreateQueryBuilder(Doctrine)でleft joinする【開発メモ】

symfony2-left-join

Symfony2テーブル連結する際、基本的にDoctrine2リレーションを使用しますが、頻繁に連結する必要がない場合にはEntityの定義が面倒になります。
そこで、createQueryBuilder関数を使って、手っ取り早くleft joinテーブル連結する方法をメモします。(すぐ忘れるので…)

$em = $this->getDoctrine()->getEntityManager();
$result = $em->getRepository('AppBundle:Blog')
        ->createQueryBuilder('b')
        ->select('b')
        ->leftJoin('AppBundle:Comment', 'c', 'WITH', 'b.id = c.blogId')
        ->where('b.title = :title')
        ->andWhere('c.userName = :userName')
        ->setParameters(['title' => $title, 'userName' => $userName])
        ->getQuery()
        ->getResult();

連結するカラムの指定

連結カラムリレーションのJoinColumn)の書き方がわからなかった。
->fromに書いてみたりしたけど上手く動作しませんでした。
結局、leftJoinで”WITH“を使いました。

$result = $em->getRepository('<親テーブル>')
        ->createQueryBuilder('<親エイリアス>')
        ->leftJoin('<子テーブル>', '<子エイリアス>', 'WITH', '<親エイリアス>.<親連結カラム> = <子エイリアス>.<子連結カラム>')

パラメータを渡す

あと、1つと複数では値をセットする際の関数が異なります。

1つの場合

->setParameter('key', $value)

複数の場合

->setParameters(['key1' => $value1, 'key2' => $value2, 'key3' => $value3])

検索はGoogle先生に頼ります。


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA