我已经开始使用 CakePHP,我正在尝试对我发现不在核心中的记录设置一些乐观锁定。在 Apress的Practical CakePHP Projects 一书中,有一个示例使用“锁定”字段在行为中创建乐观锁定。这是为 CakePHP 1.2 编写的,我正在使用 2.0,我也希望使用“修改”字段而不是单独的字段来锁定。
我计划做的是查看检索到的记录中的修改日期,然后在beforeValidate函数中将其与数据库中的内容进行比较。如果它不同,那么其他人可以访问该记录,因此生成异常。
我的功能是
function beforeValidate(&$model) {
// First find the record
if (isset($model->data[$model->name]['id']) ){
$id = $model->data[$model->name]['id'];
$table = $model->table;
$currentRecord = $model->find('all', array('conditions'=>array('id'=>$id)));
if(!empty($currentRecord)) {
if($model->data[$model->name]['modified'] != $currentRecord[0][$table]['modified']) {
$model->validationErrors['modified'] = 'Update conflict, another user has already updated the record. Please list and edit the record again.';
return false;
}
}
}
return true;
}
我发现当我尝试运行它时出现以下错误
Notice (8): Undefined index: modified [APP/Model/Behavior/MagicFieldsPlusBehavior.php, line 21]
Notice (8): Undefined index: schools [APP/Model/Behavior/MagicFieldsPlusBehavior.php, line 21]
“学校”是表格并“修改”了该字段 - 是的,他们在场:-)
第 21 行是
if($model->data[$model->name]['modified'] != $currentRecord[0][$table]['modified']) {
在此先感谢您帮助调试新手的错误!
布赖恩