我正在使用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)
您应该使用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
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将只为给定数组创建新记录.
| 归档时间: |
|
| 查看次数: |
9656 次 |
| 最近记录: |