tokisabaのブログ

ギークハウスを10軒くらい作ってる管理人のブログ

PHP:Symfony3:Doctrine:createNativeQuery:in句 の利用についてざっくり

ORMなんて嫌いだー。

とりあえず、複雑なSQLと仮定して、ナマでSQLを叩きたくなったら以下のような感じでいける。 ここらへん資料少くて辛い。誰かの役に立てば幸い。

    $entityManager = $this->getDoctrine()->getManager();
    $idlist= array();

    for($i=0;$i<count($hogeList);$i++){
        $idList[] = $hogeList[$i]; // in句で渡したい配列を入れる
   }

    $sql = "select hoge1,hoge2
              from foo_table
              where var_clm in (:idList);";

    $rsm = new ResultSetMapping();
    $rsm->addScalarResult('hoge1', 'hogehoge'); // 結果セットのカラムのマッピング必須
    $rsm->addScalarResult('hoge2', 'hogehage'); // 結果セットのカラムのマッピング必須(無いとselectに書いてても取得されない)
    $query = $entityManager->createNativeQuery($sql,$rsm)
    $query->setParameter("idList", $idList, \Doctrine\DBAL\Connection::PARAM_STR_ARRAY); //配列を引数に渡す
    $data = $query->getResult();