2011-03-22 56 views
9

我想從模型中獲取最新的數據,而不需要再進行另一次選擇。如何在保存後獲取模型數據(CakePHP)

目前,我這樣做:

if ($this->Model->save($data)){ 
    $last = $this->Model->find('first',array(
     'conditions' => array('Model.id' => $this->Model->id) 
    ); 
    $last['Model']['dataChangedByBehaviors']; // <-- data I want 
} 

我想這是在模型回調或行爲設置而不進行額外的找到任何數據。

+0

您能澄清一下,我真的不明白你在問什麼。 – Brian 2011-03-22 04:30:42

+1

我想在上面的例子中獲取像$ last這樣的數據,不需要選擇數據庫。 – meotimdihia 2011-03-22 04:33:04

+0

請再次檢查這個問題和答案。我覺得它仍然不清楚。而且就像它是前一段時間一樣,你是在解決問題的同時解決了問題,還是你的解決方案/選擇是什麼? – hakre 2012-12-28 11:36:33

回答

5

如果你正在尋找一些像這樣的解決方案if($ last = $ this-> Model-> save($ data)),我認爲沒有那樣的東西。

但是你可以用節省一些代碼findById:

if ($this->Model->save($data)){ 
     $last = $this->Model->findById($this->Model->id); 
} 
0

你不能,但一個簡單的讀取速度最快

$last = $this->Model->read(null,$this->Model->id); 
10

有您例如兩種不同的情況:

  • $ data可保存模型數據的完整記錄。然後,你可以簡單地訪問$數據[ '型號'] [ 'dataChangeByBehaviors']
if ($this->Model->save($data)){ 
     $data['Model']['dataChangeByBehaviors']; //---- I want get this 
}

所以,這裏的答案是:你已經擁有的數據。

(注:如果它是一個新的記錄,$數據當然會不包含的ID,你需要從$這個 - >型號 - > ID而得到,如果你正在在任何更改。 beforeSave()回調,這些當然不會反映在您的$ data)。

  • $ data只包含您在記錄中更新的某些字段。那麼有沒有其他辦法可以從數據庫中讀取它得到完整的記錄,除了 - 這是你已經在做的事情和建議的獅子座可以簡化爲:
if ($this->Model->save($data)){ 
     $last = $this->Model->read(null,$this->Model->id); 
     $last['Model']['dataChangeByBehaviors']; //---- I want get this 
}

所以這裏的答案:沒有數據庫請求的情況下無法獲取數據。

+0

最具說明性的答案! – 2012-05-13 14:25:43

14

我不明白爲什麼人們在做勞動工作。只需使用getLastInsertId()CakePHP的內置函數,就可以完成:

$post_id=$this->Post->getLastInsertId(); 
+0

歡迎來到Stack Overflow!感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 – 2012-12-26 11:10:36

相關問題