Предположим, вы помещаете свое задание в очередь, например:
$csv = new CSVReport;
// $csv->... = ...;
$csv->save();
Queue::push('ExportCSV', array('csvID' => $csv->id));
Метод запуска задания использует параметр $data
для передачи определенных значений, чтобы убедиться, что задание выполняет что-то конкретное.Теперь в задании ExportCSV, в пожарном методе:
public function fire($job, $data){
$report = \CSVReport::find($data['csvID']);
// prepare data and file
$report->status = 'done';
$report->save();
$job->delete();
}
Таким образом, каждое задание будет иметь идентификатор CSVReport, сериализованный в его $ data, и в то время, когда супервизор выполнит его, задание будет обрабатывать только свой определенный CVSReportИдентификатор в базе данных.
Вы все еще можете проверить статус выполненного, если какой-либо случай может обработать их вне очереди:
public function fire($job, $data){
$report = \CSVReport::where('status', CSVReport::CSVNEW)->where('id', $data['csvID'])->first();
// prepare data and file
if($report) {
$report->status = 'done';
$report->save();
}
$job->delete();
}