使用数组的Cakephp 3表更新
在的模型updateAll中,我们使用数组作为条件。但这不起作用:使用数组的Cakephp 3表更新,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,在的模型updateAll中,我们使用数组作为条件。但这不起作用: $data=array(12, 22, 44); TableRegistry::get('Foobar')->updateAll( array("checked" => 1), array("user_id" => $data) ); 这在CakePHP3中是不可能的吗 这在cakephp 3中起作用: $data=12; TableRegistry::get('Foobar')->up
$data=array(12, 22, 44);
TableRegistry::get('Foobar')->updateAll(
array("checked" => 1),
array("user_id" => $data)
);
这在CakePHP3中是不可能的吗
这在cakephp 3中起作用:
$data=12;
TableRegistry::get('Foobar')->updateAll(
array("checked" => 1),
array("user_id" => $data)
);
关于,$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();
正如文档中所述,它确实起作用:
讨论晚了一点,但由于我遇到了类似的问题,在数组条件中使用了类似于id的东西,现在在Cakephp 3上就是这样做的
//using the same example
$data=array(12, 22, 44);
TableRegistry::get('Foobar')->updateAll(
["checked" => 1],
["user_id IN " => $data] //mind the IN on the condition
);
下面是另一种方法,针对示例进行了更新
$articles = TableRegistry::get('Articles');
$data=array(12, 22, 44);
$query = $articles->query();
$query->update()
->set(['checked' => true])
->where(['user_id IN' => $data])
->execute();
希望它能帮助其他人。函数调用中缺少第二个参数。很抱歉,我无法理解。你是说updateAll函数吗?我希望您知道,如果用户输入
$data
,您的原始查询很容易被SQL注入!谢谢你,ndm。是的,这就是为什么我需要创建cakephp类型的查询,而不是原始查询。我想问题是缺少IN关键字。我在orm迁移说明中看不到它。我也很乐意接受你的回答,作为对这个问题的回答。是否有一个测试用例检查updateAll,数组条件有一个键和多个值?似乎没有。。。你凭直觉怎么看?您将如何使用多个set
和多个条件?我更新了问题,您可以从edit2中看到,Connection->query()
在这种情况下非常有效。我想我在使用updateAll
方法时犯了一个错误。但还没有找到原因。