Один из членов моей команды добавил несколько столбцов в таблицу производственной базы данных с помощью phpMyAdmin. Впоследствии я увидел, что данные не совпадают, поэтому решил создать файлы миграции для новых столбцов. Теперь, когда я пытаюсь запустить php artisan migrate
в производственной среде, я получаю сообщение об ошибке дублирования столбца, поскольку столбцы уже существуют в базе данных. Как я могу решить эту проблему в Laravel?
Я рассматривал возможность удаления столбцов из базы данных вручную, а затем выполнения миграции, но это может привести к потере данных.
Есть ли способ изменить миграцию, не удаляя существующие столбцы?
@NicoHaase это не мое решение.
Возможно, stackoverflow.com/questions/48958629/… поможет, если это затрагивает всю миграцию (а не ее части)
Вы можете использовать hasColumn
.
public function up()
{
if (!Schema::hasColumn('table_name', 'column_name'))
{
Schema::table('table_name', function (Blueprint $table)
{
$table->string('column_name');
});
}
}
Дополнительная информация в документе
Логика не верна. Должно быть !Schema::hasColumn
да, поменял. Писал вручную в SO.
вы можете проверить свой файл миграции
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddNewColumnToMyTable extends Migration
{
public function up()
{
Schema::table('my_table_name', function (Blueprint $table) {
if (!Schema::hasColumn('my_table_name', 'new_column')) {
$table->string('new_column')->nullable();
}
});
}
public function down()
{
Schema::table('my_table_name', function (Blueprint $table) {
$table->dropColumn('new_column');
});
}
}
«добавили несколько столбцов в таблицу производственной базы данных с помощью phpMyAdmin» — почему? Никогда этого не следует делать