[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]

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark