gpt4 book ai didi

php - 附加到 CreateQueryBuilder 中的 setParameters

转载 作者:行者123 更新时间:2023-11-29 06:09:19 24 4
gpt4 key购买 nike

我正在尝试这个

$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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com