Как справиться с ошибкой дублирования столбцов при миграции Laravel после ручного добавления столбцов в производство?

Один из членов моей команды добавил несколько столбцов в таблицу производственной базы данных с помощью phpMyAdmin. Впоследствии я увидел, что данные не совпадают, поэтому решил создать файлы миграции для новых столбцов. Теперь, когда я пытаюсь запустить php artisan migrate в производственной среде, я получаю сообщение об ошибке дублирования столбца, поскольку столбцы уже существуют в базе данных. Как я могу решить эту проблему в Laravel?

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

Есть ли способ изменить миграцию, не удаляя существующие столбцы?

🤔 А знаете ли вы, что...
PHP обладает хорошей производительностью благодаря опкодированию.


50
2

Ответы:

Решено

Вы можете использовать hasColumn.

  public function up()
    {
        if (!Schema::hasColumn('table_name', 'column_name'))
        {
            Schema::table('table_name', function (Blueprint $table)
            {
                $table->string('column_name');
            });
        }
    }

Дополнительная информация в документе


вы можете проверить свой файл миграции

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