使用saveMany()更改多行的字段值

时间:2017-02-09 19:58:40

标签: cakephp cakephp-2.0

我有一个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行将被删除。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。

数据必须如下:

$i = 1;
$data = [];
foreach($items as $item) {
    $data[] = ['Item' => ['id' => $item['Item']['id'], 'position' => $i]];
    $i++;
}