Symfony2: Doctrine2でちょっと複雑なORMを書く1


createQueryBuilder()を作ってselect(), from()などを指定していきます。
select(xx) xxにはカラム名を指定します。
leftJoinを使うことがきっと多いと思うのでサンプルはすべてleftJoin入れておきました。

whereを指定するには

$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$qb->select('a')
    ->from('Acme\YourBundle\Entity\ClassA', 'a')
    ->leftJoin('Acme\YourBundle\Entity\ClassB', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.id = b.id');

$result = $qb->where( 
    $qb->expr()->eq('b.category', 1)
)
->orderBy('a.id', $orderby)
->andWhere('a.is_enable = 1');

$result->getQuery()->getResult();

LIKEを使うには下記のように

$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$qb->select('a')
    ->from('Acme\YourBundle\Entity\ClassA', 'a')
    ->leftJoin('Acme\YourBundle\Entity\ClassB', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.id = b.id');

$result = $qb->where( 
    $qb->expr()->like('b.title', '%キーワード%')
)
->orderBy('a.id', $orderby)
->andWhere('a.is_enable = 1');

$result->getQuery()->getResult();

  • このエントリーをはてなブックマークに追加

コメントをどうぞ

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