从cakephp中的模型更新单行

时间:2013-11-02 11:20:07

标签: cakephp activerecord

我正在尝试循环浏览模型中的记录并更新其序列号。根据tempArray,所有值都应按顺序排列,但更新部分不会发生。在模型中使用读取/设置/保存是否有限制或我缺少什么?

    $tempArray['highest serial'] = $highest['Paragraph']['serial_number'];
    for( $i=$paragraph['Paragraph']['serial_number']; $i<$highest['Paragraph']['serial_number']; $i++ ){
        $current = $this->find('first', array(
            'fields' => array(
                'Paragraph.id',
                'Paragraph.serial_number'
            ),
            'conditions' => array(
                'Paragraph.webpage_id' => $paragraph['Paragraph']['webpage_id'],
                'Paragraph.list_element' => $paragraph['Paragraph']['list_element'],
                'Paragraph.serial_number' => ($i + 1)
            )
        ));
        $tempArray['i ' . $i . ' id'] = $current['Paragraph']['id'];
        $tempArray['i ' . $i . ' serial'] = $current['Paragraph']['serial_number'];
        $this->create($current);
        // $this->read('serial_number', $current['Paragraph']['id']);
        // $this->id = $current['Paragraph']['id'];
        $this->set('serial_number', $i);
        $this->save();
    }
    return $tempArray;

虽然tempArray的输出为( [highest serial] => 2 [i 1 id] => 7 [i 1 serial] => 2 ),但id=7的记录的serial_number未更新。

Haelp!

编辑:按照建议将read()更改为create()。不会发生SQL或PHP错误,并且tempArray值正确,但没有更新更新到数据库记录。任何帮助将不胜感激。

Edit2:它正在运作!最后..由于某种原因,我只是设法使用saveField()

使其工作
    for( $i=$paragraph['Paragraph']['serial_number']; $i<getHighestSerial($paragraph); $i++ ){
        $current = $this->find('first', array(
            'fields' => array(
                'Paragraph.id',
                'Paragraph.serial_number'
            ),
            'conditions' => array(
                'Paragraph.webpage_id' => $paragraph['Paragraph']['webpage_id'],
                'Paragraph.list_element' => $paragraph['Paragraph']['list_element'],
                'Paragraph.serial_number' => ($i + 1)
            )
        ));         
        $this->id = $current['Paragraph']['id'];
        $this->saveField('serial_number', $i);
    }

1 个答案:

答案 0 :(得分:1)

根据CakePHP Book

  

在循环中调用save时,不要忘记拨打create()