Laravel 5 obsługuje teraz zmianę kolumny; oto przykład z oficjalnej dokumentacji:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Źródło: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 nie obsługuje modyfikowania kolumn, więc musisz użyć innej techniki, takiej jak napisanie surowego polecenia SQL. Na przykład:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
pozwoli ci ponownie zmienić kolumnę.Oto pełna odpowiedź dla przyszłego czytelnika. Pamiętaj, że jest to możliwe tylko w Laravel 5+.
Przede wszystkim potrzebujesz pakietu doktryna / dbal :
Teraz podczas migracji możesz to zrobić, aby kolumna miała wartość null:
Być może zastanawiasz się, jak przywrócić tę operację. Niestety ta składnia nie jest obsługiwana:
To jest poprawna składnia do przywrócenia migracji:
Lub, jeśli wolisz, możesz napisać surowe zapytanie:
Mam nadzieję, że ta odpowiedź okaże się przydatna. :)
źródło
nullable(false)
uratowałeś mnie przed wyciąganiem włosów, ponieważnullable()
nie jest to dobrze udokumentowane i nie ma żadnejnotNull()
funkcji.SET FOREIGN_KEY_CHECKS = 0
powoduje błąd. prawdopodobnie będziesz musiał zmienić ograniczenia tabeli przy użyciu surowego zapytania. patrz tutaj: postgresql.org/docs/current/static/sql-altertable.htmlZakładam, że próbujesz edytować kolumnę, do której już dodałeś dane, więc usunięcie kolumny i ponowne dodanie jako kolumny zerowalnej nie jest możliwe bez utraty danych. Będziemy
alter
istniejącą kolumną.Jednak konstruktor schematów Laravela nie obsługuje modyfikowania kolumn innych niż zmiana nazwy kolumny. Aby to zrobić, musisz uruchomić nieprzetworzone zapytania:
Aby mieć pewność, że nadal możesz cofnąć migrację, my również to zrobimy
down()
.Jedna uwaga jest taka, że ponieważ konwertujesz między wartościami zerowalnymi i zerowymi, musisz upewnić się, że wyczyściłeś dane przed / po migracji. Zrób to w skrypcie migracji na dwa sposoby:
źródło
query
przezstatement
down
funkcji w drugim bloku kodu instrukcja SQL powinna kończyć sięNOT NULL
. (down
Funkcja w trzecim przykładzie jest poprawna).To pełna migracja dla Laravela 5 :
Chodzi o to, że możesz usunąć
nullable
przekazującfalse
jako argument.źródło
Jeśli zdarzy ci się zmienić kolumny i potknął się
następnie po prostu zainstaluj
composer require doctrine/dbal
źródło
Dodanie do odpowiedzi Dmitrija Chebotareva, podobnie jak w przypadku Laravela 5+.
Po wymaganiu pakietu doktryna / dbal :
Następnie możesz wykonać migrację z zerowymi kolumnami, na przykład:
Aby cofnąć operację, wykonaj:
źródło
Dodanie do odpowiedzi Dmitrija Chebotareva,
Jeśli chcesz zmienić wiele kolumn jednocześnie, możesz to zrobić jak poniżej
źródło
Spróbuj:
źródło
->change
na końcu i wspomnieć o tym tylko Laravel 5+composer require doctrine/dbal
Dla Laravela 4.2 powyższa odpowiedź Unnawuta jest najlepsza. Ale jeśli używasz prefiksu tabeli, musisz nieco zmienić kod.
Aby mieć pewność, że nadal możesz cofnąć migrację, my również to zrobimy
down()
.źródło