使用数组的Cakephp 3表更新

使用数组的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

在的模型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')->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
方法时犯了一个错误。但还没有找到原因。