我正在使用 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 方法可以执行相同的操作吗?谢谢
答案 0 :(得分:1)
使用updateAll
或query()
个对象进行批量更新与您在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))
);