Migrace Laravel: Vytvoření vlastních typů sloupců pomocí rawColumn

Ú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á...

Poptat web

05. 12. 2024

Migrace Laravel: Vytvoření vlastních typů sloupců pomocí rawColumn

Ú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

  1. Čistší a čitelnější migrace.
  2. Snížení závislosti na samostatných nezpracovaných příkazech SQL.
  3. 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í.

Původní článek publikoval Nabil Hassen.