Phalcon模型中的行锁定

4

由于forUpdate仍然无法正常工作(https://github.com/phalcon/cphalcon/issues/2407),那么在数据库中锁定已选择的行的最佳方法是什么?

我有一个包含要处理项目的innodb表。我通过cronjob启动一些任务,这些任务查找要处理的项目 (status=open),更新具有status=processing的行,然后执行一些操作。我该如何保护它们之间的时间?

$oModel->findFirst('status="open"');

并且

$oModel->update(['status' => 'processing']);

?


问题描述:已在Phalcon 2.0.4中实现。 - twistedxtra
1个回答

1
您可以通过设置一个选项 for_update => true 来实现这一点。
$this->db->begin();

$oModel->findFirst( [
   'conditions' => 'status="open"',
   'for_update' => true
] );

$oModel->status = 'processing';

$oModel->update();

$this->db->commit();

for_update选项将在读取每行数据时设置排他锁。同时,您还可以查看文档https://docs.phalconphp.com/en/latest/reference/models.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接