Cakephp 3表updateAll使用数组

时间:2015-07-16 20:00:25

标签: php cakephp cakephp-3.0

Cakephp 2的模型updateAll中,我们使用数组作为条件。但这不起作用:

$data=array(12, 22, 44);
TableRegistry::get('Foobar')->updateAll(
   array("checked" => 1),
   array("user_id" => $data) 
 );

这在Cakephp 3&{39}中是不可能的?

这适用于cakephp 3:

$data=12;
TableRegistry::get('Foobar')->updateAll(
   array("checked" => 1),
   array("user_id" => $data) 
 );

关于updateAll$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.

编辑:
如果蛋糕运作良好,我犯了一个错误。我怎么能理解原因?因为当条件是整数时,代码运行良好。

EDIT2: 这也很有效:

 $data=array(12, 22, 44);
 ConnectionManager::get('default')->query('UPDATE foobars SET checked=1 
     WHERE user_id IN ('.implode(",",$data).')')->execute();

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

讨论有点晚了,但由于我遇到了类似的问题,在数组条件下使用类似 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
);

以下是docs的另一种方法,为示例

更新
$articles = TableRegistry::get('Articles');
$data=array(12, 22, 44);

$query = $articles->query();
$query->update()
    ->set(['checked' => true])
    ->where(['user_id IN' => $data])
    ->execute();

希望它可以帮助别人。