2015-06-06 2 views
1

Я прочитал документацию Laravel и другие форумы, но это просто не работает на меня. Я успешно перенес таблицу, теперь мне нужно добавить поле, изменить схему на «таблицу», но все, что я получаю, это «Ничего не мигрировать».Добавление поля в схему миграции Laravel

Вот что я сделал.

миграции:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateProductTable extends Migration { 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('product', function(Blueprint $table) 
     { 

      $table->text('image'); 
      $table->integer('stock'); 
      $table->integer('amount'); 
      $table->string('color'); 
      $table->string('dimension'); 
      $table->integer('ordered'); 
      $table->timestamps(); 
     }); 
    } 

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

} 

Затем запустите команду php artisan migrate, и все хорошо.

Тогда я решил добавить новое поле, поэтому я изменил контроллер к этому:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateProductTable extends Migration { 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('product', function(Blueprint $table) 
     { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->text('description'); 
      $table->text('image'); //new 
      $table->int('active'); //new 
      $table->integer('stock'); 
      $table->integer('amount'); 
      $table->string('color'); 
      $table->string('dimension'); 
      $table->integer('ordered'); 
      $table->timestamps(); 
     }); 
    } 

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

} 

затем запустить php artisan migrate снова, но я только получаю Nothing to migrate.

Я также удалил Blueprint, это не сработало. migrate:refresh и migrate:reset выполняет эту работу, но это не то, что я хочу, так как она также удаляет данные.

ответ

2

Я думаю, что это то, что вы хотите сделать, выполните следующие действия в указанном порядке

php artisan make:migration create_products_table

Конкретизирующие вверх и вниз методов в вашем create_products_table.php (Примечание: файл миграции будет предшествовать метка времени это будет определять порядок выполнения миграций при запуске php artisan migrate.

public function up() 
{ 
    Schema::create('product', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->text('description'); 
     $table->integer('stock'); 
     $table->integer('amount'); 
     $table->string('color'); 
     $table->string('dimension'); 
     $table->integer('ordered'); 
     $table->timestamps(); 
    }); 
} 

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

Затем, чтобы создать таблицу пробег php artisan migrate

Итак, теперь у вас есть таблица продуктов, созданная, но теперь вы хотите добавить таблицу и добавить к ней дополнительные поля. Сделайте это:

php artisan make:migration alter_products_table_add_image_active

Теперь вы отдельная миграцией, чтобы изменить таблицу, вы не хотите, чтобы изменить существующую один, это не то, как работает миграция. Они по существу хранят историю создания базы данных, поэтому любые корректировки должны быть перенесены в новую миграцию, поэтому, если вы откажетесь назад, вы можете вернуться к предыдущему состоянию, которое выполняется с помощью метода down, который в значительной степени напротив метода down.

Теперь плоть вашу вверх и вниз методы в вашем изменить миграцию, alter_products_table_add_image_active.php (Примечание: запомнить файл будет автоматически предшествуют с отметкой времени)

public function up() 
{ 
    Schema::table('product', function(Blueprint $table) 
    { 
     $table->text('image'); 
     $table->int('active'); 
    }); 
} 

public function down() 
{ 
    // here you're not dropping the whole table, only removing the newly added columns 
    Schema::table('club', function(Blueprint $table){ 
     $table->dropColumn('image'); 
     $table->dropColumn('active'); 
    }); 
} 

И это должно получить вас и Бег! Пожалуйста, дайте мне знать, если у вас возникнут проблемы.

+1

Аааа! хороший! но нужно изменить '$ table-> int ('active');' to '$ table-> integer ('active');'. Большое спасибо! – shaNnex

+0

Рад, что он работает на вас. Я скоро обновлю свой ответ, не заметил, что спасибо. – haakym

0

, когда мы хотим изменить таблицу, мы можем использовать --table в MIGRATE команды, образец в таблице меню мигрирует, например

php artisan make:migrate [your migrate name] --table=menus