2016-09-22 72 views
0

我正在使用Cakephp 3.x并且我想更新单个字段以获得多个ID。事情是这样的..在CakePHP 3.x的updateAll()方法中使用IN子句

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循环执行相同的一ction。相反,我想要一个ID通过数组或逗号在任何情况下分开传递,并希望执行相同的操作。

有什么办法,我可以使用使用CakePHP的3.X

感谢

回答

1

usinga 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子句的手册的一部分

+0

非常感谢你..这对我有用..另外我得到值逗号分离和它的内部变量,所以我把它转换成像这样的数组** $ int_array = array_map(“intval”,explode(“,” $ this-> request-> data('final_ids_string'))); **然后简单地在这里发送这个数组** ['leaveregister_id IN'=> $ int_array] **,这对我来说是个窍门。你为你的努力..高度赞赏.. –

0

你必须在IN子句中使用数组类型为通ORM方法执行同样的事情

$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(); 

With updateAll()Model

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

我在我的问题中提到我已经使用过这个,但我想要使用updateAll或其他方法的相同的东西。 –

+0

为什么使用updateAll? update()有什么问题? –

+0

refere http://stackoverflow.com/questions/22068164/update-with-where-in-clause-in-cakephp ..它在CakePHP2中,但它也与CakePHP 3不兼容。 –