Как переименовать столбец в laravel с помощью миграции?

У меня есть столбцы, как указано ниже:

public function up()
{
    Schema::create('stnk', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('no_reg', 50)->unique();
        $table->string('no_bpkb', 50)->unique();
        $table->string('nama_pemilik', 100);
        $table->string('alamat');
        $table->string('merk', 50);
        $table->string('tipe', 50);
        $table->string('jenis', 50);
        $table->smallInteger('tahun_pembuatan');
        $table->smallInteger('tahun_registrasi');
        $table->smallInteger('isi_silinder');
        $table->string('no_rangka', 50);
        $table->string('no_mesin', 50);
        $table->string('warna', 50);
        $table->string('bahan_bakar', 50);
        $table->string('warna_tnkb', 50);
        $table->string('kode_lokasi', 50);
        $table->date('berlaku_sampai');
        $table->timestamps();

        $table->index('created_at');
        $table->index('updated_at');
    });

}

Я сделал сеялку для таблицы stnk

Теперь я хочу переименовать id в id_stnk.
Я добавил "doctrine/dbal" в "композитор и сделаю composer update.

Я сделал миграцию php artisan migration:make rename_column.
Затем я добавил новый метод для rename_column:

Schema::table('stnk', function(Blueprint $table)
{
    $table->renameColumn('id', 'id_stnk');

});

И затем я попытался запустить команду php artisan migrate, но я получил ошибку, как указано ниже:

[Ulluminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql -447_33' to './my_database/stnk' (error: 150) (SQL: ALTER TABLE stnk CHANGE id id_stnk INT UNSIGENED AUTO_INCREMENT NOT NULL)

[PDOException]
SQLSTATE[HY000]: General error: 1025  Error on rename  of './my_database/#sql -447_33' to './my_database/stnk' (error: 150)

Ответы

Ответ 1

Вам нужно создать еще один файл миграции и поместить его туда:

Запуск

Laravel 4:    php artisan migrate:make rename_stnk_column
Laravel 5:    php artisan make:migration rename_stnk_column

Затем в новом месте файла миграции:

class RenameStnkColumn extends Migration
{

    public function up()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id', 'id_stnk');
        });
    }


    public function down()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id_stnk', 'id');
        });
    }

}

Ответ 2

Первое, что вы хотите сделать, это создать файл миграции.

Введите в командной строке

php artisan make:migration rename_stk_column --table="YOUR TABLE" --create

После создания файла. Откройте новый созданный файл миграции в папке вашего приложения в базе данных/миграции.

В вашем методе up вставьте это:

Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id', 'id_stnk');
    });
}

и в вашем методе дауна:

    Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id_stnk', 'id);
    });
}

затем в командной строке просто введите

php artisan migrate

Тогда воллах! Вы только что переименовали идентификатор в id_stnk. Кстати, вы можете использовать

php artisan migrate:rollback

чтобы отменить изменения. Удачи

Ответ 3

Переименование столбцов (Laravel 5.x)

Чтобы переименовать столбец, вы можете использовать метод renameColumn в построителе схемы. * Перед переименованием столбца обязательно добавьте зависимость doctrine/dbal в ваш файл composer.json. *

Или вы можете просто потребовать пакет с помощью композитора...

composer require doctrine/dbal

Источник: https://laravel.com/docs/5.0/schema#renaming-columns

Примечание: используйте make: миграцию, а не мигрируйте: make для Laravel 5.x

Ответ 4

Бросив мои $0,02 сюда, так как ни один из ответов не работал, но отправил меня по правильному пути. Случилось так, что предыдущее внешнее ограничение вызывало ошибку. Очевидно, когда вы об этом думаете.

Итак, в вашем новом методе миграции up сначала снимите это исходное ограничение, переименуйте столбец, а затем добавьте ограничение снова с новым именем столбца. В методе down вы делаете прямо противоположное, чтобы вернуться к проданной настройке.

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['server_id']);

        // Rename
        $table->renameColumn('server_id', 'linux_server_id');

        // Add it
        $table->foreign('linux_server_id')->references('id')->on('linux_servers');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['linux_server_id']);

        // Rename
        $table->renameColumn('linux_server_id', 'server_id');

        // Add it
        $table->foreign('server_id')->references('id')->on('linux_servers');
    });
}

Надеюсь, это спасет кого-то в будущем!

Ответ 5

Выполните следующие действия, соответственно, для переименования файла миграции столбцов.

1- Есть ли в вашем проекте библиотека Doctrine/dbal. Если вы сначала не запускали команду

composer require doctrine/dbal

2- создать файл миграции для обновления старого файла миграции. Предупреждение (необходимо иметь одинаковое имя)

php artisan make:migrate update_oldFileName_table

например, мое старое имя файла миграции: create_users_table имя файла обновления должно: update_users_table

3- update_oldNameFile_table.php

Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});

"от" моего старого имени столбца и "до" моего нового имени столбца

4- Наконец, запустите команду переноса

php artisan migrate

Ссылка на источник: документlaravel

Ответ 6

Вышеупомянутый ответ велик, или если это не повредит вам, просто отмените миграцию и измените имя и снова выполните миграцию.

 php artisan migrate:rollback