[Doctrine]QueryBuilderのThe Expr classでDBを検索してみる覚書
参考にしたドキュメント 16. The QueryBuilder — Doctrine 2 ORM 2 documentation 「そもそもDoctrineって?」とかな人向け WordPressみたくSQL書かなくて […]
目次
参考にしたドキュメント
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]