cakephp正确的数组使用updateAll

时间:2014-05-24 19:18:49

标签: 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);

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

我也尝试过:

$this->Page->updateAll($newOrder['Page']);

1 个答案:

答案 0 :(得分:5)

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

<强> updateAll

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

$this->Page->updateAll(
    array('Page.order' => 0)
);

如果您想根据条件更新某些页面,您将执行类似的操作 -

$this->Page->updateAll(
    array('Page.order' => 0),
    array('Page.type' => 'PROMOTED')
);

假设您的页面模型中有一个类型字段,上面的查询将为所有类型为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);

现在你可以使用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