2016-06-04 17 views
13

Ho un blog per il quale il tavolo articlesSchema si definisce in questo modo:Rimuovere colonna dal database in laravel 5.2

public function up() 
{ 
    Schema::create('articles', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('user_id')->unsigned(); 
     $table->string('title'); 
     $table->string('thumb')->nullable(); 
     $table->text('excerpt'); 
     $table->text('body'); 
     $table->string('slug')->unique(); 
     $table->integer('comment_count')->unsigned()->default(0); 
     $table->integer('view_count')->unsigned()->default(0); 
     $table->timestamps(); 
     $table->softDeletes(); 
} 

public function down() 
{ 
    Schema::drop('articles'); 
} 

voglio far cadere le colonne comment_count e view_count senza perdere i dati esistenti nella tabella

ho definito una nuova migrazione come questo:

class RemoveCommentViewCount extends Migration 
{ 
    public function up() 
    { 
     //nothing here 
    } 

    public function down() 
    { 
     Schema::table('articles', function($table) { 
      $table->dropColumn('comment_count'); 
      $table->dropColumn('view_count'); 
     }); 
    } 
} 

e ho fatto php artisan migrate. È migrato correttamente, ma le due colonne non sono state eliminate.

Cosa sto sbagliando? Come posso rilasciare quelle colonne senza perdere i dati esistenti nella tabella?

+1

come indicato da @ Sangar82, i è il metodo 'up()' che viene attivato quando si esegue 'php artisan migrate'. Il metodo 'down()' viene attivato nel caso in cui si esegua un 'migrate: refresh' o un 'rollback' come spiegato di seguito. – daneczech

risposta

24

la migrazione deve assomigliare a questo:

Class RemoveCommentViewCount extends Migration 
    { 
     public function up() 
     { 
      Schema::table('articles', function($table) { 
      $table->dropColumn('comment_count'); 
      $table->dropColumn('view_count'); 
      }); 
     } 

     public function down() 
     { 
      Schema::table('articles', function($table) { 
      $table->integer('comment_count'); 
      $table->integer('view_count'); 
      }); 
     } 
    } 

Il dropColumn nel metodo l'alto, perché con nuova migrazione che si desidera eliminare questo colonne. Se si effettua un rollback, hai un altro tempo le due colonne

+0

Ha funzionato. Grazie. +1 – byteseeker

+2

È possibile eliminare più colonne da una tabella passando una matrice di nomi di colonne al metodo dropColumn: $ table-> dropColumn (['voti', 'avatar', 'posizione']); – mcmacerson

0

Basta aggiungere questo codice nella tua verso il basso() funzione nel file di migration.php

Schema::table('articles', function (Blueprint $table) { 
    $table->integer('comment_count')->unsigned()->default(0); 
    $table->integer('view_count')->unsigned()->default(0); 
}); 

e quindi eseguire -> php artigianale migrazione: rollback

Problemi correlati