Jak změnit typy sloupců pomocí migrací Laravel
Někdy je třeba změnit datový typ sloupce ve vaší databázi. Například chcete změnit sloupec ze sloupce string to integernebo z text to boolean. Laravel to umožňuje pomocí migrace.
V tomto příspěvku vás provedeme jednotlivými kroky.
Krok 1: (volitelně) Nainstalujte doctrine/dbal Balíček
Počínaje Laravel 10, již není nutné instalovat doctrine/dbal balíček pro většinu úprav sloupců. Pokud však vaše aplikace používá Laravel 10 aSQLite databázi, je třeba ji ještě nainstalovat, aby bylo možné měnit sloupce.
Pokud používáte SQLite, spusťte tento příkaz:
composer require doctrine/dbal
Krok 2: Vytvoření nové migrace
K vytvoření nového migračního souboru použijte příkaz Artisan:
php artisan make:migration change_column_type_in_users_table
Tím se vytvoří soubor v adresáři database/migrations složka.
Krok 3: Úprava sloupce
Otevřete nový migrační soubor. Uvnitř up() použijte metodu change() na sloupci. V tomto příkladu měníme age sloupec z string to integer:
use Illuminate\Support\Facades\Schema;use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration; return new class extends Migration { public function up(): void { Schema::table('users', function (Blueprint $table) { $table->integer('age')->change(); }); } public function down(): void { Schema::table('users', function (Blueprint $table) { $table->string('age')->change(); }); }};
Důležité úvahy
- ✅ Zkontrolujte, zda sloupec existuje: Zkontrolujte, zda je název sloupce správný a zda již v tabulce existuje.
- ⚠️ Kontrola kompatibility dat: Ujistěte se, že stávající data ve sloupci lze bezpečně převést na nový typ. V opačném případě databáze vyhodí chybu.
- 🔔 Opětovná definice všech modifikátorů: Od verze Laravel 10 musíte při úpravě sloupce výslovně uvést všechny modifikátory sloupce, které chcete zachovat (jako např.
nullable(),default(), nebounsigned()). Chybějící modifikátory budou vyřazeny.
Krok 4: Spuštění migrace
Nyní použijte migraci:
php artisan migrate
Souhrn
- Instalace
doctrine/dbalpouze v případě potřeby (např. Laravel 9 a starší verze nebo SQLite v Laravel 10). - Vytvoření migrace
- Použijte
$table->type('column')->change() - Dávejte pozor, abyste znovu zahrnuli modifikátory jako např.
nullable() - Spustit
php artisan migrate
Takto lze bezpečně aktualizovat typy sloupců v systému Laravel.