[Doctrine]QueryBuilderのThe Expr classでDBを検索してみる覚書

参考にしたドキュメント

16. The QueryBuilder — Doctrine 2 ORM 2 documentation

「そもそもDoctrineって?」とかな人向け

WordPressみたくSQL書かなくてもDBからデータを持ってこれるようにする仕組みって思ってもらえればです。

ORMとか説明するの面倒いので。

ちなみに「日本語ドキュメントねぇんだよなぁ・・・」という方は「Doctrine2を使いたい – ぷぎがぽぎ」とか見ると色々捗る予感です。

Doctrine1.xは「Japanese Documentation」があるんですけどね・・・

どなたか翻訳を~

とりあえずQueryBuilderを呼び出す

Doctrine2が入っていれば、これで呼び出せます。
[php]
// $em instanceof EntityManager
$em = $qb->getEntityManager();

// example1: creating a QueryBuilder instance
$qb = $em->createQueryBuilder();
[/php]

addで検索条件を作る

[php]
->add(‘where’, $expr->andX(
$expr->eq(‘p.owner_no’, ‘?1’),
$expr->in(‘p.category_no’, ‘?2’)
))
[/php]

[php]
//AND
public function andX($x = null); // Returns Expr\AndX instance
//OR
public function orX($x = null); // Returns Expr\OrX instance

//$xに$yと一致する値を持つの時
public function eq($x, $y); // Returns Expr\Comparison instance
//$xがNULLの時
public function isNull($x); // Returns string
[/php]
他にも色々あります→16. The QueryBuilder — Doctrine 2 ORM 2 documentation

setParametersで値を設定する

[php]
->setParameters(array(
1 => $owner_no,
2 => $categoryNoArr
))
[/php]
こうしておくと、?1と?2にそれぞれ設定した値が代入されるようになります。

結果を取得する

最後の検索した結果を取得します。
[php]
$CategoryRepository = $this->backend->getEM()->getRepository(‘Entities\Category’)
$Categories = $CategoryRepository->createQueryBuilder(‘p’)
->add(‘where’, $expr->andX(
$expr->eq(‘p.owner_no’, ‘?1’),
$expr->in(‘p.category_no’, ‘?2’)
))
->setParameters(array(
1 => $this->owner_no,
2 => $categoryNoArr
))
->getQuery()
->getResult();
[/php]

ネストもできる

こういうネストした検索も可能です。

[php]
$CategoryRepository = $this->backend->getEM()->getRepository(‘Entities\Category’)
$Categories = $CategoryRepository->createQueryBuilder(‘p’)
->add(‘where’, $expr->andX(
$expr->eq(‘p.owner_no’, ‘?1’),
$expr->orX(
$expr->in(‘p.category_no’, ‘?2’)
$expr->isNull(‘p.parent_category_no’, ‘?2’)
)
))
->setParameters(array(
1 => $this->owner_no,
2 => $categoryNoArr
))
->getQuery()
->getResult();
[/php]

Follow me!

Okamoto Hidetaka
デジタルキューブのインフラエンジニア。勉強会に和太鼓の練習から直行することが多く「太鼓の人」とかよばれてます。 思いつきで公式ディレクトリにテーマやプラグインをアップしたりテーマレビューやったりしています。 AWS / WordPress / LinkedOpenData周りで活動していて、APIをどうこうして何か作るというのが多いです。 ひとこと
mautic is open source marketing automation