2016-04-19 24 views
15

Ho una tabella di database esistente e voglio aggiungere una colonna. Tuttavia, mentre eseguo il comando php artisan migrate, non dice nulla da migrare. Ma aggiungo già uno schema per l'aggiunta di colonne di tabelle. Ho letto alcuni articoli e link su cui dovrei eseguire lo php artisan migrate:refresh prima di aggiungere le nuove colonne. Il problema è che cancellerà i miei dati esistenti nella mia tabella. C'è un modo per eseguire la migrazione e aggiungere con successo colonne nella mia tabella senza cancellare i miei dati? Per favore aiutami con questo. Molte grazie. Ecco il mio codice di migrazione.Come aggiungere una colonna in una tabella usando la migrazione di laravel 5 senza perdere i suoi dati?

public function up() 
{ 
    // 
    Schema::create('purchase_orders', function(Blueprint $table){ 

     $table->increments('id'); 
     $table->string('po_code'); 
     $table->text('purchase_orders'); 
     $table->float('freight_charge'); 
     $table->float('overall_total'); 
     $table->timestamps(); 

    }); 

    Schema::table('purchase_orders', function(Blueprint $table){ 
     $table->string('shipped_via'); 
     $table->string('terms'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    // 
    Schema::drop('purchase_orders'); 
} 

voglio aggiungere colonna shipped_via e terms nel mio purchase_orders tavolo.

risposta

28

utilizzare sotto comando per modificare la tabella esistente

php artisan make:migration add_shipped_via_and_terms_colums_to_purchase_orders_table --table=purchase_orders 

uso --create per creare la nuova tabella e --table per modificare la tabella esistente.

Ora verrà creato un nuovo file di migrazione. All'interno della funzione up() in questo file aggiungere queste righe

Schema::table('purchase_orders', function(Blueprint $table){ 
    $table->string('shipped_via'); 
    $table->string('terms'); 
}); 

e quindi eseguire php artisan migrate

3

Laravel ha una tabella nel database in cui tiene traccia di tutte le migrazioni che sono già state eseguite. Quindi, modificando solo il file di migrazione, Laravel non eseguirà automaticamente la migrazione per te. Causa la migrazione è già stata eseguita da Laravel.

Quindi la cosa migliore da fare è semplicemente creare una nuova migrazione e inserire il pezzo di codice in esso già presente (eri sulla buona strada!).

public function up() 
{ 
    // 
    Schema::table('purchase_orders', function(Blueprint $table){ 
     $table->string('shipped_via'); 
     $table->string('terms'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    // 

} 

Non è necessario per popolare il caso funzione di abbassamento del tavolo verrà abbandonato dalla migrazione purchase_orders corrente.

Per migrare la nuova migrazione basta eseguire:

php artisan migrate 
+1

non ho ben capito il vuoto 'verso il basso()' bit. Non è consigliabile avere entrambi 'up()' e 'down()' con 'down()' in ordine inverso? Quindi in questo caso: '$ table-> dropColumn ('shipped_via');' e '$ table-> dropColumn ('terms');' – kiradotee

+0

Ah, rileggere il messaggio dell'OP, sta creando una nuova tabella. – kiradotee

Problemi correlati