Úvod
Tvůrce schémat Laravel má novou funkci vydanou ve verzi v11.32.0: funkci Blueprint::rawColumn() metoda, kterou přispěli Jakub Potocký. Tento doplněk zjednodušuje proces vytváření a aktualizace vlastních typů sloupců, které nejsou nativně podporovány grammery Laravel přímo v migracích, a řeší omezení se syntaxí specifickou pro databázi.
Problém
Dříve definice vlastních sloupců vyžadovaly hrubý SQL prostřednictvím DB::statement. Tento přístup narušil logický průběh migrací, protože DB::statement nelze použít v rámci zpětných volání pro vytvoření tabulky (tj, Schema::create), protože se provede okamžitě. Řešením bylo nejprve definovat Schema::create, pak použijte DB::statement pro definice, které nejsou nativně podporovány, a nakonec, pokud je to nutné, uzavřete pomocí příkazu Schema::table.
new class extends Migration { public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); }); DB::statement('alter table `posts` add `legacy_boolean` int(1) default 0 not null'); Schema::table('posts', function (Blueprint $table) { $table->index(['id', 'legacy_boolean']); }); }};
Řešení
rawColumn() umožňuje zadat vlastní definice SQL inline při vytváření tabulky. Příklad:
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->rawColumn('legacy_boolean', 'int(1)')->default(0); $table->index(['id', 'legacy_boolean']);});
Výhody
- Čistší a čitelnější migrace.
- Snížení závislosti na samostatných nezpracovaných příkazech SQL.
- Vylepšená konzistence logiky definice tabulek.
Úvahy
Zatímco rawColumn() zjednodušuje syntaxi, je specifická pro danou databázi. Zajistěte kompatibilitu se zvoleným databázovým ovladačem.
Závěr
Tato nová funkce zvyšuje flexibilitu Laravelu při práci s nestandardními typy sloupců. Vývojáři nyní mohou psát migrace, které jsou výkonné a intuitivní. Podívejte se na PR #53496 pro více informací.