保存后立即查找返回过期信息的电话

时间:2014-07-07 19:57:24

标签: mysql cakephp cakephp-1.3

在我的应用程序中,操作会获取一些用户生成的输入,并使用它来更新数据库中的条目。

相关代码类似于以下内容:

$this->Model->save($data);
$result = $this->Model->findById($id);

问题是$ result的内容已过时。也就是说,$ result包含之前的记录保存。

我假设条目没有更新,直到函数返回。但是,我无法做到明显的

$result = $this->Model->save($data);

因为此方法不保留关系。在这种情况下,模型属于另一个模型。我需要能够获取更新的记录它所属的记录。

2 个答案:

答案 0 :(得分:0)

看看是否

$result = $this->Model->findById($id); 

从缓存加载,而不是从数据库加载。

看看: http://fredericiana.com/2007/09/05/cakephp-delete-cached-models-on-database-change/ http://snook.ca/archives/cakephp/delete_cached_models/

答案 1 :(得分:0)

就个人而言,我从未喜欢过Cake的神奇发现功能。我发现很难添加额外的条件/连接/等等,我更喜欢键入更多的行并获得一些我可以轻松调整的特定内容。

在这种情况下听起来就像魔术查找功能从缓存中返回一样,你应该尝试常规的查找调用:

$this->Model->save($data);
$result = $this->Model->find('first', array('conditions' => array('id' => $id)));

但是,您应该尝试缩小问题范围并找出确切的内容以供将来参考。您可以在进行魔术查找之前手动尝试clearing the cache,看看是否得到了正确的答案:

$this->Model->save($data);
Cache::clear();
$result = $this->Model->findById($id);

另一种不太可能的选择是,您的$id变量可能没有指向正确的模型行,而您的保存可能会创建一个新变量,以便在您findById($id)$id }与您刚刚保存/创建的行的ID不同。在这种情况下,值得在您的保险箱之前和之后执行debug($id)$this->log('ID is: ' . $id, 'my_test_log');,或者通过您的代码定期查看正在发生的事情以及在哪里。