0

我有以下 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 包含逗号分隔值。如果我将该变量更改为数组,则会收到以下消息:

注意:数组到字符串的转换

任何人都可以阐明我的问题吗?我完全被难住了。

4

1 回答 1

2

您不能将字符串传递到 DQL 以进行IN类型查询。您需要传入一个数组。因为 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);
于 2013-06-17T16:42:22.370 回答