cakephp正确的数组使用updateAll

Kei*_*wer 1 cakephp

我正在使用cakephp 2.5,我有一个数组,我希望在Page模型中一次更新许多记录.我似乎无法获得正确的数组格式.我收到错误:

注意(8):未定义的索引:newOrder [APP/Controller/PagesController.php,第133行]

$newOrder = array(
        'Page' => array(
            0 => array(
                'id' => 3,
                'order' => 0),
            1 => array(
                'id' => 4,
                'order' => 0),
            2 => array(
                'id' => 7,
                'order' => 0
            )
));
$this->Page->updateAll($newOrder);
Run Code Online (Sandbox Code Playgroud)

我认为我缺少的一个部分是使用'data'作为数组的一部分.但我不确定在哪里放置它.

我也尝试过:

$this->Page->updateAll($newOrder['Page']);
Run Code Online (Sandbox Code Playgroud)

Nit*_*har 6

您应该使用saveMany满足您的要求.找到下面的解释 -

全部更新

updateAll(array $ fields,array $ conditions) - 用于根据条件或多个条件更新具有相同值的一个或多个记录.例如:如果您想更新所有页面并将所有页面设置为order = 0,则可以使用updateAll而不传递主键 -

$this->Page->updateAll(
    array('Page.order' => 0)
);
Run Code Online (Sandbox Code Playgroud)

如果您想根据条件更新某些页面,您将执行以下操作:

$this->Page->updateAll(
    array('Page.order' => 0),
    array('Page.type' => 'PROMOTED')
);
Run Code Online (Sandbox Code Playgroud)

假设您的页面模型中有一个类型字段,上面的查询将为所有类型为PROMOTED的页面设置0

参考 - http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-updateall-array-fields-array-conditions

saveMany

现在,如果要更新某些特定记录以及要在数组中创建的特定值,则应使用saveMany(array $ data = null,array $ options = array())

要使用数据阵列保存/更新多个记录,首先应该以这种格式创建数据数组 -

$data = array(
 array('Page' => array('id' => 1, 'order' => 0)),
 array('Page' => array('id' => 2, 'order' => 0)),
 array('Page' => array('id' => 3, 'order' => 0))
);
$this->Page->saveMany($data);
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用saveMany更新具有顺序0的给定id(主键)的三个记录.注意,如果您未传递主键(即数组中的id),saveMany将只为给定数组创建新记录.

参考 - http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savemany-array-data-null-array-options-array