php - 附加到 CreateQueryBuilder 中的 setParameters

标签 php mysql symfony doctrine-orm

我正在尝试这个

$results = this->get('doctrine')->getManager()->createQueryBuilder()
        ->select('x.a, x.b')
        ->from('mytable', 'x');

$results->where('AND x.d = :d');

if ('All' == $my_var) {
    $results->andWhere('x.a IN (:my_var)')
}

$results->setParameters(
    array(
        'd' => $var_d,
    )
);

现在我想附加 setParameters 并在 ('All' == $my_var) 时添加 ('my_var' => $my_var) >,是否可行?

最佳答案

是的,你可以,但在这种情况下请确保使用 setParameter 而不是 setParameters,因为 setParameters 会忽略先前的参数设置。

错误示例:

$qb->where('entity.foo = :foo');
$qb->setParameter('foo', $foo); // this param will be ignored after setParameters is called.
// ...
$qb->andWhere('entity.bar = :bar AND entity.baz = :baz')
$qb->setParameters(array('bar' => $bar, 'baz' => $baz)); // wrong statement.

return $qb->getQuery()->getResult();

这会抛出一条 QueryException 消息:参数太少:查询定义了 3 个参数,但您只绑定(bind)了 2 个

很好的例子:

$qb->where('entity.foo = :foo');
$qb->setParameter('foo', $foo);
// ...
$qb->andWhere('entity.bar = :bar AND entity.baz = :baz')
$qb->setParameter('bar', $bar);
$qb->setParameter('baz', $baz);

// or setting all parameters to end
$qb->setParameters(array('foo' => $foo, 'bar' => $bar, 'baz' => $baz)); 

return $qb->getQuery()->getResult();

在您的情况下:

$results = this->get('doctrine')->getManager()->createQueryBuilder()
    ->select('x.a, x.b')
    ->from('mytable', 'x');

$results->where('x.d = :d')->setParameter('d', $var_d);

if ('All' === $my_var) {
    $results->andWhere('x.a IN (:my_var)')->setParameter('my_var', $my_var);
}

注意:在您的代码中 $results->where('AND x.d = :d'); 并记住使用 where/andWhere 语句,它们已经将 AND 添加到 sql 查询结果中。

关于php - 附加到 CreateQueryBuilder 中的 setParameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39317871/

相关文章:

java - 使用外部硬盘写入和存储 mysql 数据库

php - 在没有 Symfony 的情况下使用 Twig

php - symfony ajax 表单动态修改

php - 如何从一个 inner-join-where 查询中将获取的结果显示到 2 组不同的 div 中?

php webdriver - 等待警报而不终止测试用例

php - 重定向到php中的页面url

symfony - Typo3 - 如何在 symfony commandController 中获取 extbase 上下文

php - 我正在尝试在 Laravel 中混合数据透视表值

mysql - 获取从订阅到付款的平均时间

mysql - SQL-根据另一列的内容查找最大值