在CakePHP 3.x中的updateAll()方法中使用IN子句

时间:2016-09-22 05:00:41

标签: mysql cakephp cakephp-3.x

我正在使用 Cakephp 3.x ,我想更新我的单个字段以获取多个ID。像这样......

UPDATE mytable SET `status` = '1' WHERE ID IN (1,2,3)

目前我正在使用查询来使用cakpehp

执行此操作
$this->Leaveregisters->query()
                ->update()
                ->set(['leaveregister_status' => $this->request->data('status')])
                ->where(['leaveregister_id IN ('.$this->request->data('final_ids_string').')'])
                ->execute();  

嗯这对我来说很有用,但我希望这可以使用cakephp 3.xs的ORM方法执行..所以我试着用它代替

$table->updateAll(['field' => $newValue], ['id' => $entityId]);

但是这个代码仅用于我不想要的单个id。我也不想使用foeach循环来执行相同的操作。相反,我想在任何情况下通过数组或逗号分隔 ID ,并希望执行相同的操作。

使用 cakephp 3.x

使用 ORM 方法可以执行相同的操作吗?

谢谢

2 个答案:

答案 0 :(得分:1)

使用updateAllquery()个对象进行批量更新与您在this段末尾的手册中可以阅读的内容相同

所以你可以做到

$this->Leaveregisters->query()
    ->update()
    ->set(['leaveregister_status' => $this->request->data('status')])
    ->where(['leaveregister_id IN' => [1,2,3])
    ->execute(); 

$this->Leaveregisters->updateAll(
    ['leaveregister_status' => $this->request->data('status')]
    ['leaveregister_id IN' => [1,2,3]);

请记住,当使用IN子句时,您必须传递一个数组。阅读手册的this部分,了解如何创建IN子句

答案 1 :(得分:0)

您必须使用数组数据类型传入IN CLAUSE

$in_condition= explode(",",$this->request->data('final_ids_string'));

$this->Leaveregisters->query()
                ->update()
                ->set(['leaveregister_status' => $this->request->data('status')])
                ->where(['leaveregister_id IN' => $in_condition])
                ->execute(); 

使用Model

的updateAll()
$table->updateAll(array(
       // new values
    ),
    array('id' => array(1,2,3,4,5,6))
);