我尝试在WHERE IN语句的dbal querybuilder中绑定参数[1,2]
我尝试将$qb->expr()->in()
更改为字符串版本,但未做任何更改
创建QueryBuilder
$qb = $this->_em->getConnection()->createQueryBuilder()
->select('c.id AS id')
->from('category', 'c')
->andWhere($qb->expr()->in('c.id', ':categories'))->setParameter('categories', [1, 2], \Doctrine\DBAL\Connection::PARAM_INT_ARRAY);
执行:
$qb->execute()->fetchAll();
错误:Array to string conversion
期望将整数数组绑定到querybuilder语句
答案 0 :(得分:1)
总是喜欢引用文档。
// Example - $qb->expr()->in('u.id', array(1, 2, 3))
// Make sure that you do NOT use something similar to $qb->expr()->in('value', array('stringvalue')) as this will cause Doctrine to throw an Exception.
// Instead, use $qb->expr()->in('value', array('?1')) and bind your parameter to ?1 (see section above)
public function in($x, $y); // Returns Expr\Func instance
因此,从本质上讲,除非类别是数字,否则您必须用占位符填充数组并设置它们,或者如果它们是数字,则可以只使用示例。
答案 1 :(得分:-1)
我假设您有一个实体,该实体具有ManyToMany或ManyToOne和Category实体, 您可以只传递一个类别数组,如果这样正确地制作该数组,它应该可以工作:
qb = $this->_em->getConnection()->createQueryBuilder()
->select('c.id AS id')
->from('category', 'c')
->andWhere($qb->expr()->in('c.id',':categories'))->setParameter('categories', $categoriesArray);
否则,您可以通过内爆数组来尝试将setParameter与id数组一起使用:
qb = $this->_em->getConnection()->createQueryBuilder()
->select('c.id AS id')
->from('category', 'c')
->andWhere($qb->expr()->in('c.id', ':categories'))->setParameter('categories', implode(",",[1, 2]));