1

我有两个数据库表:visitorspasses. 访问者包括一个字段pass_id,它引用passes表中的一条记录。

通行证表预先填充了有效通行证列表。

每位访客必须在抵达时随机分配一个通行证 ID,预计不会为其他访客分配相同的 ID(直到相关的访客记录被注销)。

朴素的解决方案只是简单地执行 afind()以提取一个随机未分配的 pass ID,然后将该 ID 通过save()值传递给后续的 ID,但这并不能防止同一个 pass 被偶然分配多次(尤其是当并发用户数上升,或可用通行证池变小)。

在纯 MySQL 实现中,我会在 中进行子查询INSERT,这样两个操作同时发生,而不是在两个离散的 DB 调用中发生。相关的 MySQL 文档清楚地表明,单独的事务不会阻止SELECT查询后发生外部数据库更改,因此我不能为此使用 Cake 的内置事务支持。

同样在纯 MySQL 中,我可以使用触发器动态获取值(甚至不通知 Cake),但是如果我用尽了可能的 pass ID 列表,我希望能够显示一个有意义的错误而不是获取 SQL 插入保存失败(如果可能的话,我们希望保持数据库不可知)。

是否可以在 CakePHP 中很好地做到这一点而无需使用 using Model::query()

4

0 回答 0