2014-10-09 107 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