4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ozvisionAdvent Calendar 2019

Day 15

コードを書いてQueryBuilderに慣れよう

Last updated at Posted at 2019-12-23

Doctrineの話題になるとよく出てくるQueryBuilder。

SQLっぽく書くためによく使うと思いますが、自分自身なんとなく使っていたところがあります。

いい機会なので使い方のメモを残します。

前提条件:テーブルとSQL

テーブルは下記を想定します。

  • テーブル名:item
id name date
1 hoge 2019-12-23
2 fuga 2019-12-24
3 fuga 2019-12-25
4 piyo 2019-12-26

下記のsqlをQueryBuilderを使って再現します。


select * from item i where i.name = 'fuga';

書いてみる

function getItem($string itemName)
{
    $qb = $this->entityManager->createQueryBuilder();
    $resultData = $qb->select('*')
        ->from('item', 'i')
        ->Where('i.name = :itemName')
        ->setParameter('itemName', $itemName)
        ->getQuery()
        ->getResult();

    return $resultData;
}

書いてみると上のような形になります。上記を$this->getItem('fuga')のように呼び出してあげるとsqlと同様の結果が取得できると思います。

QueryBuilderを用意しておいて使い回す

汎用的なQueryBuilderを用意して使い回すこともできます。

public function templateItemQB($string itemName)
{
    $qb = $this->entityManager->createQueryBuilder()
        ->select('*')
        ->from('item', 'i')
        ->Where('i.name = :itemName')
        ->setParameter('itemName', $itemName);

    return $qb;
}

public function getItem()
{
     $qb = $this->templateQB('fuga');
     $qb->andWhere('i.date = :itemDate')
        ->setParameter('itemDate', '2019-12-25');

     $rerultData = $qb->getQuery()->getResult();
}

まとめ

QueryBuilderはとっつきづらいイメージを持っていましたが、コードを書いていくと理解が深まると思います。

食わず嫌いせず、簡単な物でもいいのでまずは書いて動かしてみましょう。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?