CakePHP:保存后查找数据
我正在研究一种编辑方法。保存数据后,将发送一封电子邮件,其中包含编辑过程中所做的更改。除了一个恼怒但关键的bug之外,一切都正常。在这里,它被提炼得非常简单: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)) {
$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。解决方案在对主要问题的评论中。