3

由于 forUpdate 仍然不起作用(https://github.com/phalcon/cphalcon/issues/2407),锁定数据库中选择的行的最佳方法是什么?

我有一个包含要处理的项目的 innodb 表。我通过 cronjob 开始一些任务,这些任务负责处理要处理的项目(status=open),更新行,status=processing然后做一些事情。我怎样才能保护之间的时间

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

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

?

4

1 回答 1

0

您可以通过设置选项 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

于 2016-04-02T12:34:00.070 回答