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はとっつきづらいイメージを持っていましたが、コードを書いていくと理解が深まると思います。
食わず嫌いせず、簡単な物でもいいのでまずは書いて動かしてみましょう。