在CakePHP保存中执行子查询

时间:2016-06-17 08:38:13

标签: mysql cakephp cakephp-2.8

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

传递表预先填充了有效传递列表。

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

天真的解决方案只是执行find()来提取随机未分配的传递ID,然后将该ID传递到后续的save()值,但这并不会阻止相同的传递偶然分配多次(特别是当并发用户数增加或者可用传递池变小时)。

在纯MySQL实现中,我会在INSERT中进行子查询,这样两个操作都会立即发生,而不是发生在两个不连续的DB调用中。 The relevant MySQL documentation清楚地表明单独的事务不会阻止在SELECT查询后发生外部数据库更改,所以我不能使用Cake的内置事务支持。

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

是否可以在CakePHP中很好地完成此操作而无需使用Model::query()

0 个答案:

没有答案