由于在 CakePHP 中似乎不支持乐观锁定,因此我正在尝试构建一个实现它的行为。在对行为进行了一些研究之后,我想我可以在 beforeSave 事件中运行一个查询来检查版本字段是否没有改变。
但是,我宁愿通过将更新语句的 WHERE 子句从
WHERE id = ?
到
WHERE id = ? and version = ?
这样我就不必担心其他请求会在我读取版本和执行更新之间更改数据库记录。这也意味着我可以进行一次数据库调用而不是两次。
我可以看到该DboSource.update()
方法支持条件,但从Model.save()
不向它传递任何条件。
似乎我有几个选择:
- 办理登机手续
beforeSave()
并接受它不是防弹的事实。 - 破解我的本地 CakePHP 副本以检查数组中的
conditions
键并将其传递给方法。options
Model.save()
DboSource.update()
现在,我倾向于第二种选择,但这意味着我不能与其他用户分享我的行为,除非他们将我的 hack 应用到他们的框架中。
我错过了一个更简单的选择吗?