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 使用数组的主要内容,如果未能解决你的问题,请参考以下文章