2016-05-03 12 views
16

Mam tabelę z przypisaną wartością domyślną. Na przykład możemy spojrzeć na:Migracje Laravel zmieniają domyślną wartość kolumny

Schema::create('users', function (Blueprint $table) { 
      $table->increments('id')->unsigned(); 
      $table->integer('active')->default(1); 
     }); 

Chcę teraz zmienić domyślną wartość aktywnego pola. Spodziewam się zrobić coś takiego:

if (Schema::hasTable('users')) { 
     Schema::table('users', function (Blueprint $table) { 
      if (Schema::hasColumn('users', 'active')) { 
       $table->integer('active')->default(0); 
      } 
     }); 
    } 

Ale oczywiście mówi mi, że kolumna już tam jest. Jak mogę po prostu zaktualizować domyślną wartość kolumny x bez opuszczania kolumny?

+0

dobrze, ponieważ jego tylko o jedną kolumnę możesz zrobić to ręcznie za pomocą interfejsu, takiego jak phpmyadmin (xampp), workbench itp., więc nie stracisz żadnych danych .. –

+0

To, co zrobiłem na razie, aby naprawić to na naszym serwerze na żywo, ale nadal chciałbym wiedzieć, jaki jest najlepszy sposób na dalszy rozwój. W przeciwnym razie myślałem o aktualizacji do wersji 5 –

+0

tutaj jest link, który może ci pomóc - http://www.flipflops.org/2013/05/25/modify-an-existing-database-column-in-a -laravel-migration/ –

Odpowiedz

20

Można użyć change() metody:

Schema::table('users', function ($table) { 
    $table->integer('active')->default(0)->change(); 
}); 

następnie uruchomić komendę migrate.

Aktualizacja

Dla laravel 4 użyć czegoś takiego:

DB::statement('ALTER TABLE `users` CHANGE COLUMN `active` `active` INTEGER NOT NULL DEFAULT 0;'); 

Wewnątrz up() metoda zamiast Schema::table(); klauzula.

+0

Niestety nie dodałem, ale używam laravel 4.2 –

+0

Dla Laravel 4 powinieneś użyć surowego zapytania. Sprawdź zaktualizowane pytanie. –

+0

Czy wiesz, jak wycofać? –

0

Trzeba wezwać change function zaktualizować kolumnie

if (Schema::hasTable('users')) { 
    Schema::table('users', function (Blueprint $table) { 
     if (Schema::hasColumn('users', 'active')) { 
      $table->integer('active')->default(0)->change(); 
     } 
    }); 
} 
+0

Niestety nie dodałem, ale używam programu laravel 4.2. –

-2

uruchomić poniższy kod w CLI

php artisan migration:refresh 

będzie zmienić schematu tabeli

Twoje dane zostaną utracone

1

Można utworzyć kolejną migracja -

php artisan migrate:make update_users 

niż wewnątrz nowej migracji napisać swoje alter zapytanie do zmian -

public function up() 
    { 
     DB::query("ALTER TABLE... "); 
     // the alter query here^


     )); 
    } 

i niż uruchom migrację ponownie

php artisan migrate 
Powiązane problemy