使用 saveMany() 更改多行的字段值
Change field value of multiple rows with saveMany()
我有一个项目模型,类别为:
class Item extends AppModel {
…
public $hasAndBelongsToMany = array(
'Category' =>
array(
'className' => 'Category',
'joinTable' => 'categories_items',
'foreignKey' => 'item_id',
'associationForeignKey' => 'category_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
…
}
另一边我也一样,Category。这意味着我有一个名为 CategoriesItems.
的连接 table
我想为所有行更新项目 table 的字段。
$dataSource = $this->Item->getDataSource();
$dataSource->begin();
$items = $this->Item->find('all');
$i = 1;
$data = array();
foreach($items as $item) {
if($i == $newPosition) {
$movingItem['Item']['position'] = $newPosition;
$data[] = $movingItem;
$i++;
}
$item['Item']['position'] = $i;
$data[] = $item;
$i++;
}
if($this->Item->saveMany($data, array('deep' => true))) {
$dataSource->commit();
$this->autoRender = false;
header("HTTP/1.0 200 OK");
return true;
}
else {
$dataSource->rollback();
$this->autoRender = false;
header("HTTP/1.0 404 Not Found");
return false;
}
看来我的数据数组不错。但是当我尝试保存它时,CategoriesItems 行被删除了。
我终于找到了解决方案。
数据需要这样:
$i = 1;
$data = [];
foreach($items as $item) {
$data[] = ['Item' => ['id' => $item['Item']['id'], 'position' => $i]];
$i++;
}
我有一个项目模型,类别为:
class Item extends AppModel {
…
public $hasAndBelongsToMany = array(
'Category' =>
array(
'className' => 'Category',
'joinTable' => 'categories_items',
'foreignKey' => 'item_id',
'associationForeignKey' => 'category_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
…
}
另一边我也一样,Category。这意味着我有一个名为 CategoriesItems.
的连接 table我想为所有行更新项目 table 的字段。
$dataSource = $this->Item->getDataSource();
$dataSource->begin();
$items = $this->Item->find('all');
$i = 1;
$data = array();
foreach($items as $item) {
if($i == $newPosition) {
$movingItem['Item']['position'] = $newPosition;
$data[] = $movingItem;
$i++;
}
$item['Item']['position'] = $i;
$data[] = $item;
$i++;
}
if($this->Item->saveMany($data, array('deep' => true))) {
$dataSource->commit();
$this->autoRender = false;
header("HTTP/1.0 200 OK");
return true;
}
else {
$dataSource->rollback();
$this->autoRender = false;
header("HTTP/1.0 404 Not Found");
return false;
}
看来我的数据数组不错。但是当我尝试保存它时,CategoriesItems 行被删除了。
我终于找到了解决方案。
数据需要这样:
$i = 1;
$data = [];
foreach($items as $item) {
$data[] = ['Item' => ['id' => $item['Item']['id'], 'position' => $i]];
$i++;
}