2016-05-03 61 views
16

Ho una tabella con un valore predefinito già assegnato. Per un esempio possiamo vedere quanto segue:Le migrazioni di Laravel modificano il valore predefinito della colonna

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

Ora desidero modificare il valore predefinito sul campo attivo. Mi aspetto di fare qualcosa di simile:

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

Ma ovviamente mi dice che la colonna è già lì. Come posso semplicemente aggiornare il valore predefinito della colonna x senza rilasciare la colonna?

+0

bene fin dalla sua solo circa una colonna puoi farlo manualmente usando l'interfaccia come phpmyadmin (xampp), workbench ecc. in modo da non perdere dati .. –

+0

Questo è quello che ho fatto per ora per sistemarlo sul nostro server live, ma mi piacerebbe comunque sapere qual'è il modo migliore per andare avanti. Altrimenti pensavo anche di passare a laravel 5 –

+0

qui è un link che potrebbe aiutarti - http://www.flipflops.org/2013/05/25/modify-an-existing-database-column-in-a -laravel-migration/ –

risposta

20

È possibile utilizzare il metodo change():

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

Quindi eseguire migrate comando.

Aggiornamento

Per laravel 4 uso qualcosa di simile:

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

All'interno up() metodo invece di Schema::table(); clausola.

+0

Scusa non aggiunta ma sto usando laravel 4.2 –

+0

Per Laravel 4 è necessario utilizzare query non elaborata. Si prega di verificare la domanda aggiornata. –

+0

sai come eseguire il rollback? –

0

Dovete chiamare il change function per aggiornare la colonna

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

Scusa non aggiunta ma sto usando laravel 4.2. –

-2

eseguire il codice qui sotto in CLI

php artisan migration:refresh 

che cambierà la vostra schema della tabella

i dati saranno persi

.210
1

È possibile creare un'altra migrazione -

php artisan migrate:make update_users 

che all'interno nuova migrazione scrivere la query alter per i cambiamenti -

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


     )); 
    } 

e di eseguire la Migrazione nuovo

php artisan migrate