Миграция Laravel dropColumn отбрасывает неправильный столбец

У меня очень странная проблема, которую я не могу объяснить. Это заставляет меня сильно волноваться, потому что проект, над которым я работаю, находится в сети, и я иногда могу обновить столбцы базы данных.

// Migration file

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

class ChangeUserProfilesTable extends Migration {

/**
* Run the migrations.
*
* @return void
*/
public function up()
{

Schema::table('user_profiles', function($table)
{

// Keys
$table->datetime('status_updated_at')->nullable();

});

}

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

Schema::table('user_profiles', function($table)
{

// Columns to remove
$table->dropColumn('status_updated_at');

});

}

}

Теперь я мигрирую, все работает хорошо, я проверил, и моя таблица хорошая

html(master)$ php artisan migrate
Migrated: 2015_03_19_111236_change_user_profiles_table

Вот часть моей таблицы MySQL

в некоторых колонках все нормально

Теперь я делаю откат, все так просто, как кажется.

 html(master)$ php artisan migrate:rollback
Rolled back: 2015_03_19_111236_change_user_profiles_table

А теперь я просто смотрю на свой стол, и он становится причудливым

моя колонна исчезла

Да, status Колонна исчезла без причины. И есть еще тот, который должен был быть удален. Я пытался 10 раз, это просто не работает … Я не могу даже migrate больше потому что

   [Illuminate\Database\QueryException]
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'status_
updated_at' (SQL: alter table `user_profiles` add `status_updated_at` datet
ime null)

У кого-то есть идеи по этому поводу? Если это проблема, то это БОЛЬШАЯ проблема, потому что миграции — это очень чувствительная вещь в проекте … Я больше не доверяю Laravel, и мне интересно, как мне поступить с производственной стороной.

** РЕДАКТИРОВАТЬ: Чтобы найти решение здесь все миграции, связанные с этой таблицей (но это не должно называться в любом случае …)

Я использую Laravel 4.2 **

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

class CreateUserProfilesTable extends Migration {

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

// Keys
$table->increments('id');
$table->integer('user_id')->unsigned()->nullable();
$table->integer('box_id')->unsigned()->nullable();

$table->string('stripe_customer');

$table->string('contract_id');

// Indexes
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('box_id')->references('id')->on('boxes')->onDelete('cascade');

// Timestamps
$table->timestamps();
$table->softDeletes();

});

}

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

Schema::table('user_profiles', function(Blueprint $table)
{

$table->dropForeign('user_profiles_user_id_foreign');
$table->dropForeign('user_profiles_box_id_foreign');

});

Schema::dropIfExists('user_profiles');

}}

И позже

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

class ChangeUserProfilesTable extends Migration {

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

// Keys
$table->enum('status', array('not-subscribed', 'in-progress', 'subscribed', 'expired'));

});

}

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

Schema::table('user_profiles', function(Blueprint $table)
{

// Columns to remove
$table->dropColumn('status');

});}

}

1

Решение

Тот факт, что у меня было одно и то же имя classe в некоторых миграциях, поставил композитора в беду. composer dump-autoload позволил мне увидеть это.

Например :

 Generating autoload files
Warning: Ambiguous class resolution, "ChangeBoxQuestionsTable" was found in both      "/Users/Loschcode/Dropbox/htdocs/projets/bordeaux_in_box_lo/html/app/database/migrations/2015_03_12_183836_change_box_questions_table.php" and "/Users/Loschcode/Dropbox/htdocs/projets/bordeaux_in_box_lo/html/app/database/migrations/2015_03_19_040137_change_box_questions_table.php", the first will be used.

Поэтому я вручную изменил имена файлов / классов, а также в базе данных migrations стол тоже. Теперь работает нормально;)

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]