2016-04-19 47 views
15

Mevcut bir veritabanı tablom var ve üzerinde sütun eklemek istiyorum. Ancak, php artisan migrate komutunu çalıştırdığımda, taşınacak hiçbir şey olmadığını söylüyor. Ancak, tablo sütunları eklemek için zaten bir Şema ekliyorum. Eklenecek yeni sütunlardan önce php artisan migrate:refresh'u çalıştırmam gereken bazı makale ve bağlantılar okudum. Sorun şu ki, mevcut verilerimi masamda sileceğim. Verilerimi silmeden, taşıma işlemini gerçekleştirebilmem ve tablolarıma başarılı bir şekilde sütun ekleyebileceğim bir yol var mı? Lütfen bana yardım et. Çok teşekkürler. İşte göç kodum.Bir tablodaki veriyi kaybetmeden laravel 5 geçişi kullanarak sütun nasıl eklenir?

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'); 
} 

benim purchase_orders tabloda sütun shipped_via ve terms eklemek istiyorum.

cevap

28

Kullanım mevcut tabloyu değiştirmek için yeni bir tablo ve --table oluşturmak için kullanılan mevcut tablo

php artisan make:migration add_shipped_via_and_terms_colums_to_purchase_orders_table --table=purchase_orders 

kullanımını --create değiştirmek için.

Şimdi yeni bir geçiş dosyası oluşturulacak. Bu dosyada up() fonksiyonu İçinde bu satır

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

eklemek Sonra php artisan migrate

3

Laravel, veritabanınızda, önceden yürütülen tüm geçişleri takip ettiği bir tabloya sahiptir. Bu nedenle, yalnızca taşıma dosyasını değiştirerek Laravel sizin için bu geçişi otomatik olarak yeniden çalıştırmaz. Çünkü göç zaten Laravel tarafından yürütülüyor.

Yapmanız gereken en iyi şey, yeni bir geçiş oluşturmak ve sahip olduğunuz kod parçasını koymaktır (doğru yolda idiyseniz!).

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() 
{ 
    // 

} 

Alttaki işlev durumu, geçerli satın alma_ geçişi geçişinizle bırakılacak tabloyu doldurmanız gerekmez.

yeni göç sadece çalıştırmak taşımak için: komuta altında

php artisan migrate 
+1

gerçekten() 'biraz aşağı' boş anlamadım çalıştırın. Her iki 'up()' ve 'down()' ile 'down()' tersine sahip olmak en iyi uygulama değil mi? Bu durumda: '$ table-> dropColumn ('shipped_via');' ve '$ table-> dropColumn ('terms'); – kiradotee

+0

Ah, OP'nin mesajını tekrar okur, yeni bir tablo oluşturur. – kiradotee