Doctrine Query Builder 使用数组

Posted

技术标签:

【中文标题】Doctrine Query Builder 使用数组【英文标题】:Doctrine Query Builder using Array 【发布时间】:2012-07-19 06:38:34 【问题描述】:

我有一个 id 数组:

Id_array; //array(2)  [0]=> int(9) [1]=> int(10)  

我只想使用 Id_array 选择用户; 当我没有数组而只有一个整数时,我设法做到了:

$query = $em->createQuery('SELECT u FROM Users u WHERE u.id = ?1');
$query->setParameter(1, 9); // I tested the value 9 here
$users = $query->getResult(); 

如何获取Id_array对应的所有用户?

【问题讨论】:

【参考方案1】:

或者没有查询生成器:

$query = $em->createQuery('SELECT u FROM Users u WHERE u.id IN (:id)');
$query->setParameter('id', array(1, 9));
$users = $query->getResult();

【讨论】:

【参考方案2】:

如果有人遇到类似的情况,我使用查询生成器,关键是使用 IN 语句。

//...
$qb = $this->createQueryBuilder('u');
$qb->add('where', $qb->expr()->in('u.id', ':my_array'))
->setParameter('my_array', $Id_array);

【讨论】:

您的解决方案效果最好,因为它也处理字符串,接受的答案仅适用于整数 以上对我不起作用。我不得不做setParameter('my_array', $Id_array, Connection::PARAM_INT_ARRAY)。可能是因为我使用的是 DBAL 查询生成器,而不是 ORM。【参考方案3】:

从 2.1 或 2.2 开始,存储库现在就实现了关于学说 2

findBy(array('id' => array(1, 2, 3, 4, 5));

【讨论】:

正是我想要的!谢谢!

以上是关于Doctrine Query Builder 使用数组的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine Query Builder,“between”表达式和子查询

Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?

Doctrine Query builder,计算相关的一对多行

Doctrine Query Builder Select Count with Case

Doctrine2 查询(Builder)在使用“where”和“in”子句后失去关系

Symfony Query Builder join ON 和 WITH 区别