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

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

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

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

«добавили несколько столбцов в таблицу производственной базы данных с помощью phpMyAdmin» — почему? Никогда этого не следует делать

Nico Haase 04.09.2024 07:59

@NicoHaase это не мое решение.

Pavel Rahman 04.09.2024 11:26

Возможно, stackoverflow.com/questions/48958629/… поможет, если это затрагивает всю миграцию (а не ее части)

Nico Haase 04.09.2024 11:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

Логика не верна. Должно быть !Schema::hasColumn

Pavel Rahman 04.09.2024 06:28

да, поменял. Писал вручную в SO.

Mr. Kenneth 04.09.2024 06:53

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

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

Другие вопросы по теме