我有一个Item类型:
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' => ''
)
);
…
}
我对另一方也有同样的事情,分类。这意味着我有一个名为CategoriesItems的连接表。
我想更新所有行的Item表的字段。
$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行将被删除。
答案 0 :(得分:0)
我终于找到了解决方案。
数据必须如下:
$i = 1;
$data = [];
foreach($items as $item) {
$data[] = ['Item' => ['id' => $item['Item']['id'], 'position' => $i]];
$i++;
}