doctrine dql/queryBuilder 参数中有 foreach 或数组
doctrine dql/queryBuilder with a foreach or array in parameters
在我的 symfony 应用程序中,我通过 ajax 脚本将变量恢复为字符串。
这个变量看起来像这样:
$slug = "1-2-3-4-4-5-6-7" /* it could more*/
$vars = explode('-',$slug ); /*push the $slug string in an array */
/* recover all value of the array */
foreach ($vars as $var) {
echo $var;
}
现在我需要在 dql
或 query builder
中使用这个 foreach,因为所有 $var 都是一个实体的 ID,我需要传递所有这些值以获得正确的结果。
如何使用参数数组进行查询或在 doctrine 查询生成器中进行 foreach?
我已经在 queryBuilder 方法中尝试过这个:
->setParameters("id" => $vars);
它return给我一个错误:SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
我也在 queryBuilder 中尝试这样做:
->setParameters(array('id' => array($vars)));
这里我没有报错,但是没有return的好结果。事实上,如果有很多 ID,我在数据库中只有一个 结果。
尝试使用 ->setParameter('ids', $ids)。其中 $ids 是 ids
的数组
解决方案是。
我创建了一个更复杂的查询来回答所有条件:
array is empty
array contains only 1 value
array contains many values
如果您想检查该 ID 是否在给定的一组特定 ID 内,您可以使用 IN
。
$qb = $this->createQueryBuilder('s')
->addSelect('u')
->innerJoin('s.field','u')
->where("u.id IN(:ids)")
->setParameter('ids', array_values($ids));
在我的 symfony 应用程序中,我通过 ajax 脚本将变量恢复为字符串。
这个变量看起来像这样:
$slug = "1-2-3-4-4-5-6-7" /* it could more*/
$vars = explode('-',$slug ); /*push the $slug string in an array */
/* recover all value of the array */
foreach ($vars as $var) {
echo $var;
}
现在我需要在 dql
或 query builder
中使用这个 foreach,因为所有 $var 都是一个实体的 ID,我需要传递所有这些值以获得正确的结果。
如何使用参数数组进行查询或在 doctrine 查询生成器中进行 foreach?
我已经在 queryBuilder 方法中尝试过这个:
->setParameters("id" => $vars);
它return给我一个错误:SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
我也在 queryBuilder 中尝试这样做:
->setParameters(array('id' => array($vars)));
这里我没有报错,但是没有return的好结果。事实上,如果有很多 ID,我在数据库中只有一个 结果。
尝试使用 ->setParameter('ids', $ids)。其中 $ids 是 ids
的数组解决方案是
我创建了一个更复杂的查询来回答所有条件:
array is empty
array contains only 1 value
array contains many values
如果您想检查该 ID 是否在给定的一组特定 ID 内,您可以使用 IN
。
$qb = $this->createQueryBuilder('s')
->addSelect('u')
->innerJoin('s.field','u')
->where("u.id IN(:ids)")
->setParameter('ids', array_values($ids));