max('id') ?? 0) + 1; /** @var Settings $settings */ $settings = resolve(Settings::class); $maxSQLPlaceholders = 65535; $insertColumns = collect(DB::getSchemaBuilder() ->getColumnListing(new Code()->getTable())) ->reject(fn ($name): bool => in_array($name, ['id', 'code_exported']))->count() + 1; /** * Nombre d'insertions max sur un seule requète */ $perPage = \floor($maxSQLPlaceholders / $insertColumns); /** * Nombre de page totale à insérer. */ $totalPages = \ceil($this->amount / $perPage); $totalGeneratedInserts = 0; for ($currentPage = 1; $currentPage <= $totalPages; $currentPage++) { $inserts = []; $insertToGenerate = min($perPage, $this->amount - $totalGeneratedInserts); do { $inserts[] = [ 'id' => $last_id++, 'date_creation' => now()->format('Y-m-d'), ]; } while (($totalGeneratedInserts < $this->amount) && --$insertToGenerate); // * Mass insert Code::query()->insert($inserts); $totalGeneratedInserts += count($inserts); } // * Fin de la génération. Mail::to(config('mail.admin'))->send(new CodeGenerationSucceed( $this->amount, $settings->name )); }); } /** * In case of job failure */ public function failed(Throwable $exception): void { Mail::to(config('mail.admin'))->send( new JobFailed(self::class, [ 'message' => $exception->getMessage(), 'trace' => $exception->getTraceAsString(), ]) ); } /** * Get the middleware the job should pass through. * * @return array */ public function middleware(): array { return [ new WithoutOverlapping('code_generation') ->releaseAfter(60), ]; } }