Laravel 4.2 предотвращает одновременный запуск запроса

Используя laravel 4.2, у меня есть задание Cron, которое выполняется каждую минуту, оно берет список заданий из базы данных аналогично следующему:

$records = DB::table('jobs')->where('finished', '=', 0)->
whereBetween('created_at', [Carbon::now(),Carbon::now()->addMinutes(2)])->get();
// Process records
..

После окончания он обновит «готовое» поле до 1.

Теперь, поскольку задание cron выполняется каждую минуту, мне нужно убедиться, что если задание cron было запущено до завершения предыдущего, оно не будет запускать или не выбирать те же записи.

1

Решение

Решил эту проблему с помощью транзакции & lockForUpdate:

DB::beginTransaction();
$records = DB::table('jobs')->where('finished', '=', 0)->lockForUpdate()->get();
// process
DB::commit();
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]