Saya memiliki kolom seperti yang disebutkan di bawah ini:
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');
});
}
Saya telah membuat seeder ke tabel stnk
Sekarang saya ingin mengganti nama id
menjadi id_stnk
.
Saya telah menambahkan "doktrin / dbal" di "komposer" dan melakukan a composer update
.
Saya telah melakukan migrasi php artisan migration:make rename_column
.
Kemudian saya telah menambahkan metode baru untuk mengganti nama_kolom:
Schema::table('stnk', function(Blueprint $table)
{
$table->renameColumn('id', 'id_stnk');
});
Dan kemudian saya sudah mencoba menjalankan perintah php artisan migrate
tetapi saya mendapat kesalahan seperti yang disebutkan di bawah ini:
[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
padastnk
tabel.make:migration
dan bukanmigrate:make
"doctrine/dbal": "~2.3"
Tanpa itu Anda mendapatkan beberapa kesalahan yang sangat tidak jelas. Itu dibesarkan sebagai bug di sini github.com/laravel/framework/issues/3116 dan dengan sebutan yang kurang berguna dalam dokumentasi di sini laravel.com/docs/5.0/schema#renaming-columnshal pertama yang ingin Anda lakukan adalah membuat file migrasi Anda.
Ketik baris perintah Anda
php artisan make:migration rename_stk_column --table="YOUR TABLE" --create
Setelah membuat file. Buka file migrasi baru yang dibuat di folder aplikasi Anda di bawah database / migrasi.
Dalam metode up Anda, masukkan ini:
Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id', 'id_stnk'); }); }
dan metode down Anda:
Schema::table('stnk', function(Blueprint $table) { $table->renameColumn('id_stnk', 'id); }); }
lalu di baris perintah Anda cukup ketik
Lalu wollah! Anda baru saja mengganti nama id menjadi id_stnk. BTW bisa Anda gunakan
php artisan migrate:rollback
untuk membatalkan perubahan. Semoga berhasil
sumber
Ikuti langkah-langkah ini, masing-masing untuk mengganti nama file migrasi kolom.
1- Apakah ada perpustakaan Doktrin / dbal dalam proyek Anda. Jika Anda belum menjalankan perintah terlebih dahulu
composer require doctrine/dbal
2- buat pembaruan file migrasi untuk memperbarui file migrasi lama. Peringatan (harus memiliki nama yang sama)
php artisan make:migration update_oldFileName_table
misalnya nama file migrasi lama saya: create_users_table memperbarui nama file harus: update_users_table
3- update_oldNameFile_table.php
Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });
'dari' nama kolom lama saya dan 'ke' nama kolom baru saya
4- Terakhir jalankan perintah migrasi
Link sumber: dokumen laravel
sumber
Mengganti Nama Kolom (Laravel 5.x)
Untuk mengganti nama kolom, Anda dapat menggunakan metode renameColumn di pembuat Skema. * Sebelum mengganti nama kolom, pastikan untuk menambahkan ketergantungan doktrin / dbal ke file composer.json Anda. *
Atau Anda dapat meminta paket menggunakan komposer ...
composer require doctrine/dbal
Sumber: https://laravel.com/docs/5.0/schema#renaming-columns
Catatan: Gunakan make: migrasi dan bukan migrasi: make untuk Laravel 5.x
sumber
Melemparkan $ 0,02 saya ke sini karena tidak ada jawaban yang berhasil, tetapi mengirim saya ke jalur yang benar. Apa yang terjadi adalah kendala asing sebelumnya yang menyebabkan kesalahan. Jelas ketika Anda memikirkannya.
Jadi dalam
up
metode migrasi baru Anda , pertama-tama jatuhkan batasan asli tersebut, ganti nama kolomnya, lalu tambahkan batasan lagi dengan nama kolom baru. Dalamdown
metode ini, Anda melakukan kebalikannya sehingga kembali ke pengaturan yang dijual./** * 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'); }); }
Semoga ini menghemat waktu seseorang di masa depan!
sumber
Jawaban di atas bagus atau jika tidak akan merugikan Anda, cukup kembalikan migrasi dan ubah nama dan jalankan migrasi lagi.
php artisan migrate:rollback
sumber