2015-06-02 8 views
3

Так как forUpdate все еще не работает (https://github.com/phalcon/cphalcon/issues/2407), что лучше всего заблокировать SELECTed rows in db?блокировка строки phalcon с моделями

У меня есть таблица innodb с элементами для обработки. Я запускаю через cronjob некоторые задачи, которые ищут элементы для обработки (status=open), обновляют строку с помощью status=processing, а затем делают некоторые вещи. Как я могу защитить время между

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

и

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

?

+0

Вопрос: Реализован в Phalcon 2.0.4 – twistedxtra

ответ

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