2013-11-02 29 views
0

我正在嘗試通過記錄在我的模型中循環並更新其序列號。根據tempArray的所有值應該是有序的,但更新部分沒有發生。在模型中使用讀取/設置/保存有什麼限制或缺少什麼?從cakephp模型更新單行

$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值是正確的,但沒有更改更新到數據庫記錄。任何幫助將不勝感激。

編輯2:它的工作!最後..出於某種原因,我只設法得到它的工作使用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); 
    } 

回答

0

按照CakePHP Book

當調用保存在一個循環中,不要忘記調用create()

+2

嗯,它應該是:「**總是在創建新記錄時調用create()。**」...... – mark

+0

@mark - yah?我不知道。你能澄清一下推理嗎? – Dave

+1

不僅因爲上述原因(在那裏你很容易忘記它),還因爲你永遠不知道是否有早期的回調已經設置了id,因此更新而不是創建記錄。所以這不僅是一個好習慣,而且在創建時總是要添加create()。 – mark