Как обновить несколько данных в CakePHP - PullRequest
0 голосов
/ 03 мая 2018

Мне нужно сохранить несколько строк с разными условиями для каждой строки.

Как:

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 голосов
/ 03 мая 2018

Если я понимаю вышеупомянутую проблему в настоящее время, вы можете достичь этого с помощью функции saveMany в cakePHP. Все, что вам нужно сделать, это преобразовать данные, которые вы хотите сохранить, в форму массива и передать этот единственный массив в функцию saveMany.

Подробнее см. Здесь

Вот пример кода для вышеуказанных деталей в 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);

Для тортаPHP 2.x:

Подробнее см. Здесь

Надеюсь, это то, что вы ищете.

Редактировать: основываясь на обновленных требованиях, я думаю, что единственный способ добиться этого - сделать пользовательский запрос с помощью метода Model-> query. Вам нужно будет сформировать пользовательский запрос для обновления всех записей за один раз.

...