【发布时间】:2015-07-16 20:00:25
【问题描述】:
在Cakephp 2 的模型updateAll 中,我们使用数组作为条件。但这不起作用:
$data=array(12, 22, 44);
TableRegistry::get('Foobar')->updateAll(
array("checked" => 1),
array("user_id" => $data)
);
这在 Cakephp 3 的 updateAll 中是不可能的吗?
这适用于 cakephp 3:
$data=12;
TableRegistry::get('Foobar')->updateAll(
array("checked" => 1),
array("user_id" => $data)
);
关于API docs,$conditions定义如下:
updateAll( array $fields , mixed $conditions )
array $fields
A hash of field => new value.
mixed $conditions
Conditions to be used, accepts anything Query::where() can take.
编辑:
如果蛋糕效果很好,我犯了一个错误。我怎样才能理解原因?因为当条件为整数时,代码运行良好。
编辑2: 这也很有效:
$data=array(12, 22, 44);
ConnectionManager::get('default')->query('UPDATE foobars SET checked=1
WHERE user_id IN ('.implode(",",$data).')')->execute();
【问题讨论】:
-
函数调用中缺少第二个参数
-
对不起,我听不懂。你是说 updateAll 函数吗?
-
stackoverflow.com/questions/26887511/where-in-clause 我希望您知道您的原始查询很容易受到 SQL 注入,以防
$data成为用户输入! -
谢谢ndm。是的,这就是为什么我需要创建一个 cakephp 类型的查询,而不是一个原始查询。我想问题是缺少 IN 关键字。我在 orm 迁移说明中看不到它。 book.cakephp.org/3.0/en/appendices/orm-migration.html 另外,我很乐意接受您的回复作为对这个问题的回答。
标签: php cakephp cakephp-3.0