为什么我的'where in'Dictrtrine DQL查询没有返回预期的结果?

时间:2013-06-17 16:15:09

标签: php doctrine-orm dql where-in

我有以下DQL查询:

$queries_query = $this->_em->createQuery('SELECT q FROM \Entities\Query q INNER JOIN q.store s WHERE s.tvRegionId IN (?1)');
$queries_query->setParameter(1, $tv_region_ids);

它只返回与where子句中的第一个值匹配的结果。变量$ tv_region_ids包含逗号分隔值。如果我将该变量更改为数组,我会收到以下消息:

注意:数组转换为字符串

请有人对我的问题有所了解。我完全被难倒了。

1 个答案:

答案 0 :(得分:2)

对于IN类型的查询,您无法将字符串传递给DQL。你需要传入一个数组。因为DQL与预处理语句非常相似,所以IN查询被视为表达式,原始数据必须提供给setParameter函数。

示例

$tv_region_ids = [16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1];

$queries_query = $this->_em->createQuery('SELECT q FROM \Entities\Query q INNER JOIN q.store s WHERE s.tvRegionId IN (?1)');
$queries_query->setParameter(1, $tv_region_ids);

转换字符串(只是包含)

$string = "16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1";

$tv_regions_ids = explode(",", $string);