CakePHP:保存后查找数据

CakePHP:保存后查找数据,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我正在研究一种编辑方法。保存数据后,将发送一封电子邮件,其中包含编辑过程中所做的更改。除了一个恼怒但关键的bug之外,一切都正常。在这里,它被提炼得非常简单: $data = $this->SupportTicket->readForView($st_id); $this->SupportTicket->id = $st_id; if ($this->SupportTicket->save($this->request->data)) {

我正在研究一种编辑方法。保存数据后,将发送一封电子邮件,其中包含编辑过程中所做的更改。除了一个恼怒但关键的bug之外,一切都正常。在这里,它被提炼得非常简单:

$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

}
问题是$data与预保存数据一起出现。因此,我接下来尝试对新数据所做的工作不起作用。 我不能只使用$this->request->data,因为它没有我想要的完整数据

不过,保存确实有效。如果我刷新同一记录的view方法,它将显示为updated。所以它是在保存,但当我在保存后进行查找时,它会给我提供旧数据

有什么想法吗

更新: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;
}

将此方法中的代码复制到控制器中会得到相同的结果。

尝试使用最后一个插入ID

$id=$this->getLastInsertID

公共函数readForView$id

我发现这很有用:

按型号:

class Project extends AppModel {
    var $cacheQueries = false;
...
按职能:

function someFunction {
  $this->Model->cacheQueries = false;
...

您是否碰巧使用了模型::$cacheQueries?同意,@ndm-一定发生了某种缓存。是的,就是这样!我不是最初编写应用程序的,几乎没有在AppModel中查找。@ndm如果您将其作为答案发布,我将很乐意接受。您建议以什么优雅的方式逐个查找关闭它?我发现了这个,但它是针对Cake 1.x的,我的OOP fu不够强大,无法为2.x找到它。这是没有用的。我不想要更新方法的最后一个插入ID。我已经知道$id。解决方案在对主要问题的评论中。