Mittul At TechnoBrave
Mittul At TechnoBrave

Reputation: 1242

Use IN clause in updateAll() method in CakePHP 3.x

I am using Cakephp 3.x and i want to update my single field for multiple ids. Something like this..

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

Currently i am using query to perform this action using cakpehp

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

Well this does the trick for me but i want this to be performed using cakephp 3.xs' ORM method .. so i am trying to use this instead

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

But this code is for single id only which i do not want.. i also do not want to use foeach loop to perform the same action. Instead i want an ID to be passed via array or comma seperated in any case and want to perform the same action.

Is there any way i can perform the same thing using ORM method using cakephp 3.x

Thanks

Upvotes: 0

Views: 1033

Answers (2)

arilia
arilia

Reputation: 9398

usinga updateAll or a query() objects to do a bulk update is the same thing as you can read in the manual at the end of this paragraph

so you can do

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

or

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

remember then when usin IN clause you have to pass an array. Read this part of the manual on how to create IN clause

Upvotes: 1

Haresh Vidja
Haresh Vidja

Reputation: 8496

You have to use array datatype for pass in 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(); 

With updateAll() of Model

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

Upvotes: 0

Related Questions