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 に答える