我正在使用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']);
答案 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级
<强> 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将只为给定数组创建新记录