max('id') ?? 0) + 1; /** @var \App\Models\Settings $settings */ $settings = app(Settings::class); $maxSQLPlaceholders = 65535; $insertColumns = collect(DB::getSchemaBuilder() ->getColumnListing((new Code())->getTable())) ->filter(function ($name) { // * Ignorer les colonnes avec valeurs par défaut sur la table. return !in_array($name, ['id', 'code_exported']); })->count() + 1; /** * Nombre d'insertions max sur un seule requète * * @var integer $perPage */ $perPage = \floor($maxSQLPlaceholders / $insertColumns); /** * Nombre de page totale à insérer. * * @var integer $totalPages */ $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 * * @param \Throwable $exception * @return void */ public function failed(\Throwable $exception) { Mail::to(config('mail.admin'))->send( new JobFailed(__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) ]; } }