response()
->download($pathToFile, $name, $headers)
->deleteFileAfterSend(true); //<--
Job::dispatchAfterResponse()
$schedule->job(new SyncChangesFrom1C)
->everyMinute()
->withoutOverlapping()
->runInBackground();
while(true) {
//делаем работу
sleep(10);
}
return 0;
withoutOverlapping()
по умолчанию ставит лок на 24 часа (на 1440 минут) и если скрипт крутится больше этого времени то будет запущен второй экземпляр. offset()
и limit()
для загружаемых реляций increment
и decrement
для изменеия балансаpublic function updateBalance($bet_amount): void
{
$this->decrement('balance', $bet_amount);
}
UPDATE `users` SET `balance` = `balance` - $bet_amount WHERE id = ...
lockForUpdate()
чтобы исключить любые конфликты на уровне БД и тогда redis-локи в принципе можно убрать. prepareForValidation()
"illuminate/events": "^8.0",
"illuminate/routing": "^8.0"
UPDATE table
SET column2 = (CASE column1 WHEN 1 THEN 'val1'
WHEN 2 THEN 'val2'
WHEN 3 THEN 'val3'
END)
WHERE column1 IN(1, 2 ,3);
INSERT into `table` (id, fruit)
VALUES (1, 'apple'), (2, 'orange'), (3, 'peach')
ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);
enctype="multipart/form-data"
<form action="{{route('gallery.store')}}" method="post" enctype="multipart/form-data">
multipart
contents
$csv_data = 'xxxx;yyy;zzz';
$client->request('POST', '/post', [
'multipart' => [
[
'name' => 'mycsv',
'contents' => $csv_data,
'filename' => 'custom_filename.csv'
],