在我的应用程序中,操作会获取一些用户生成的输入,并使用它来更新数据库中的条目。
相关代码类似于以下内容:
$this->Model->save($data);
$result = $this->Model->findById($id);
问题是$ result的内容已过时。也就是说,$ result包含之前的记录保存。
我假设条目没有更新,直到函数返回。但是,我无法做到明显的
$result = $this->Model->save($data);
因为此方法不保留关系。在这种情况下,模型属于另一个模型。我需要能够获取更新的记录和它所属的记录。
答案 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');
,或者通过您的代码定期查看正在发生的事情以及在哪里。