Mam kolumny, jak wspomniano poniżej:
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');
});
}
Zrobiłem siewnik do stłuczenia stołu
Teraz chcę zmienić nazwę id
na id_stnk
.
Dodałem „doctrine / dbal” w „composer” i zrobiłem composer update
.
Dokonałem migracji php artisan migration:make rename_column
.
Następnie dodałem nową metodę do rename_column:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id', 'id_stnk');
});
A potem próbowałem uruchomić polecenie, php artisan migrate
ale pojawił się błąd, jak wspomniano poniżej:
[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)
id
wstnk
tabeli.make:migration
i niemigrate:make
"doctrine/dbal": "~2.3"
Bez tego pojawiają się bardzo niejasne błędy. Został zgłoszony jako błąd tutaj github.com/laravel/framework/issues/3116 i prawdopodobnie mniej przydatna wzmianka w dokumentacji tutaj laravel.com/docs/5.0/schema#renaming-columnsPierwszą rzeczą, którą chcesz zrobić, jest utworzenie pliku migracji.
Wpisz swoją linię poleceń
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
Po utworzeniu pliku. Otwórz nowo utworzony plik migracji w folderze aplikacji w sekcji Baza danych / migracje.
W swojej metodzie up wstaw to:
Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id', 'id_stnk'); }); }
iw swojej metodzie puchu:
Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id_stnk', 'id); }); }
następnie w linii poleceń wpisz
Wtedy wollah! właśnie zmieniłeś nazwę id na id_stnk. BTW możesz użyć
php artisan migrate:rollback
cofnąć zmiany. Powodzenia
źródło
Wykonaj następujące kroki, odpowiednio, aby zmienić nazwę pliku migracji kolumn.
1- Czy w Twoim projekcie jest biblioteka Doctrine / dbal? Jeśli nie masz, najpierw uruchom polecenie
composer require doctrine/dbal
2- Utwórz plik migracji aktualizacji do aktualizacji starego pliku migracji. Ostrzeżenie (musisz mieć taką samą nazwę)
php artisan make:migration update_oldFileName_table
na przykład nazwa mojego starego pliku migracji: create_users_table nazwa pliku aktualizacji powinna: update_users_table
3- update_oldNameFile_table.php
Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });
„z” mojej starej nazwy kolumny i „do” mojej nowej nazwy kolumny
4- Na koniec uruchom polecenie migracji
Link do źródła: dokument laravel
źródło
Zmiana nazw kolumn (Laravel 5.x)
Aby zmienić nazwę kolumny, możesz użyć metody renameColumn w Kreatorze schematów. * Przed zmianą nazwy kolumny pamiętaj, aby dodać zależność doctrine / dbal do pliku composer.json. *
Możesz też po prostu zażądać pakietu za pomocą kompozytora ...
composer require doctrine/dbal
Źródło: https://laravel.com/docs/5.0/schema#renaming-columns
Uwaga: użyj make: migracja i nie migrować: make dla Laravel 5.x
źródło
Wrzucam tutaj moje 0,02 dolara, ponieważ żadna z odpowiedzi nie zadziałała, ale skierowała mnie na właściwą ścieżkę. Zdarzyło się, że poprzedni obcy przymus spowodował błąd. Oczywiste, kiedy się nad tym zastanowić.
Dlatego w nowej
up
metodzie migracji najpierw usuń pierwotne ograniczenie, zmień nazwę kolumny, a następnie ponownie dodaj ograniczenie z nową nazwą kolumny. Wdown
metodzie robisz dokładnie odwrotnie, aby powrócić do sprzedanego ustawienia./** * 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'); }); }
Mam nadzieję, że to zaoszczędzi komuś trochę czasu w przyszłości!
źródło
Powyższa odpowiedź jest świetna lub jeśli nie zaszkodzi, po prostu wycofaj migrację i zmień nazwę i ponownie uruchom migrację.
php artisan migrate:rollback
źródło