2014-10-09 87 views
1

我正在編輯一個編輯方法。保存數據後,會發送一封電子郵件,其中包含修改期間所做的更改。除了一個令人生氣但卻至關重要的錯誤之外,一切都有效在這裏它被簡單地提取出來:CakePHP:保存後查找數據

$data = $this->SupportTicket->readForView($st_id); 
$this->SupportTicket->id = $st_id; 
if ($this->SupportTicket->save($this->request->data)) { 

    //call custom model method to pull view data 
    $data = $this->SupportTicket->readForView($st_id); 
    //do something with this data 

} 

問題是$數據與預保存數據一起出來。因此,我然後嘗試處理新數據不起作用。 我不能僅僅使用$ this-> request-> data,因爲它沒有我想要的全部數據。

然而,保存工作。如果我刷新相同記錄的視圖方法,則它顯示爲已更新。所以它是保存的,但是當我在保存之後進行查找時,它會給我提供舊數據。

任何想法?

更新:findById($ st_id)不會發生,所以它必須與我的自定義方法有關。代碼:

public function readForView($id) 
{ 
    $data = $this->find('first', array(
     'conditions' => array(
      'SupportTicket.id' => $id 
     ), 
     'contain' => array(
      'User', 
      'Owner' 
     ) 
    )); 

    if (empty($data)) { 
     throw new notFoundException('Ticket not found'); 
    } 

    $data['SupportTicket']['type_long'] = $this->getLongType($data['SupportTicket']['type']); 
    $data['SupportTicket']['status_long'] = $this->getLongStatus($data['SupportTicket']['status']); 
    $data['SupportTicket']['name'] = 'Support Ticket #' . $data['SupportTicket']['id'] . ' - ' . $data['SupportTicket']['title']; 

    return $data; 
} 

將此方法的代碼複製到Controller中可得到相同的結果。

+4

任何你偶然使用[** query caching **](http://book.cakephp.org/2.0/en/models/model-attributes.html#cachequeries)(Model :: $ cacheQ ueries)? – ndm 2014-10-09 17:09:11

+0

同意,@ndm - 必須有某種緩存發生。 – Dave 2014-10-09 17:17:49

+0

是的,就是這樣!我原本沒有編寫應用程序,也很難看AppModel。 – gazareth 2014-10-09 19:12:43

回答

-1

嘗試使用最後一個插入ID

$ id = $ this-> getLastInsertID();

公共職能readForView($ ID)

+0

這沒有用。我不希望UPDATE方法的最後一個插入ID。我已經知道$ id了。解決方案在對主要問題的評論中。 – gazareth 2014-10-10 14:30:31