9

これがdqlクエリです

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)";
    $q = $em->createQuery($dql)
                ->setParameter(1, '108919,108920');
    $result = $q->execute();

setParameter doctrine を介してパラメーターを渡すと、最初の結果のみが返されますが、それらを直接 dql-query に入れると、2 つの結果が返されます (これは正しいです)。

$dql = "SELECT t Entities\Table t WHERE t.field1 IN (108919,108920)";

setParameterを介してWHERE句の「IN」を処理する方法は?

4

5 に答える 5

9

これは、名前付きパラメーターではなく、番号付きパラメーターに対してのみ機能することに注意してください。

$searchParameters = array(108919, 108920);

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)";
$q = $em->createQuery($dql)
   ->setParameter(1, $searchParameters);

$result = $q->execute();
于 2012-02-17T15:30:58.213 に答える
6

以下は正常に機能するはずです。

$searchParameters = array(108919, 108920);

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1)";
$q = $em->createQuery($dql)
   ->setParameter(1, $searchParameters);

$result = $q->execute();

implode()を使用せずに配列を渡すことができ、doctrineはそれを(整数のリストとして)適切に処理します。

注:文字列「108919、108920」をすでに使用している場合は、展開機能とトリム機能を使用する必要があります。

これはここでも言及されています:Doctrine2.0のDQLでinステートメントを使用する方法

于 2011-12-11T07:34:43.320 に答える
1

以下は期待どおりに機能するはずです(句への任意の数の引数に対してIN

$params = array(1 => 108919, 2 => 108920);
$qb = $em->createQueryBuilder();
$qb->select(array('t'))
   ->from('Entities\Table', 't')
   ->where($qb->expr()-> in('t.field', array_map(function($p) { return '?'.$p; }, array_keys($params)))
   ->setParameters($params);
$q = $qb->getQuery();
$r = $q->getResult();
于 2011-09-23T11:03:17.263 に答える
0

これは機能しています

public function searchCategory($target){

      $query = $this->getEntityManager()
                    ->createQuery("SELECT ct.id as id,ct.name as name, ct.target as target FROM LoveThatFitAdminBundle:ClothingType ct WHERE ct.target IN (:target)")
                     ->setParameter('target',$target['target']);
                     try {
                     return $query->getResult();
                } catch (\Doctrine\ORM\NoResultException $e) {
                return null;
                }

 }
于 2013-10-07T12:34:23.357 に答える
0

解決策 1 :

$dql = "SELECT t Entities\Table t WHERE t.field IN (?1, ?2)";
$q = $em->createQuery($dql)
->setParameters(array(1 =>'108919', 2 => '108920'));
$result = $q->execute();

解決策 2 (よりエレガント) :

$parameters = array(1 =>'108919', 2 => '108920');
$dql = 'SELECT t Entities\Table t WHERE t.field IN (?'.implode(', ?', array_keys($parameters)).')';
$q = $em->createQuery($dql)
->setParameters($parameters);
$result = $q->execute();
于 2011-09-23T10:49:00.847 に答える