如何更新CakePHP

时间:2018-05-03 04:06:06

标签: php cakephp cakephp-2.0

我需要保存多行,每行的条件不同。

喜欢:

Update orderdetails SET data = "'.$json1.'" WHERE order_id = 1;
Update orderdetails SET data = "'.$json2.'" WHERE order_id = 2;
Update orderdetails SET data = "'.$json3.'" WHERE order_id = 3;
Update orderdetails SET data = "'.$json4.'" WHERE order_id = 4;
Update orderdetails SET data = "'.$json5.'" WHERE order_id = 5;

我知道CakePHP的单行更新方法,我可以运行5次表单来更新所有行。

但我想通过只能在查询之上运行的一行代码来保存它。

我的代码

$update = array(
    array('data' => $json1,'order_id' => 1),
    array('data' => $json2,'order_id' => 2),
    array('data' => $json3,'order_id' => 3),
    array('data' => $json4,'order_id' => 4),
    array('data' => $json5,'order_id' => 5)
);
$this->Orderdetail->saveMany($update);

那么,CakePHP中是否有任何方法可以实现它??

1 个答案:

答案 0 :(得分:2)

如果我目前了解上述问题,您可以通过使用cakePHP中的saveMany函数来实现此目的。您所要做的就是以数组的形式转换要保存的数据,并将该单个数组传递给saveMany函数。

See here for more details

以下是cakePHP 3中上述详细信息的代码示例:

$saveData = [
    [
        'order_id' => 1,
        'data' => $json1
    ],
    [
        'order_id' => 2,
        'data' => $json2
    ],
    [
        'order_id' => 3,
        'data' => $json3
    ],
    [
        'order_id' => 4,
        'data' => $json4
    ],
    [
        'order_id' => 5,
        'data' => $json5
    ]
];

$orderDetails = TableRegistry::get('Orderdetails');
$entities = $orderDetails->newEntities($saveData);
$result = $orderDetails->saveMany($entities);

对于cakePHP 2.x:

See here for more details

希望这就是你要找的东西。

编辑:根据更新的要求,我想实现它的唯一方法是使用Model->查询方法进行自定义查询。您必须为一次性更新所有记录的自定义查询形成。