Laravel 5 sekarang mendukung pengubahan kolom; inilah contoh dari dokumentasi resmi:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Sumber: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 tidak mendukung kolom modifikasi, jadi Anda perlu menggunakan teknik lain seperti menulis perintah SQL mentah. Sebagai contoh:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
akan memungkinkan Anda mengubah kolom kembali.Inilah jawaban lengkap untuk pembaca masa depan. Perhatikan bahwa ini hanya mungkin di Laravel 5+.
Pertama-tama Anda akan membutuhkan paket doktrin / dbal :
Sekarang dalam migrasi Anda, Anda dapat melakukan ini untuk membuat kolom nullable:
Anda mungkin bertanya-tanya bagaimana cara mengembalikan operasi ini. Sayangnya sintaks ini tidak didukung:
Ini adalah sintaks yang benar untuk mengembalikan migrasi:
Atau, jika Anda mau, Anda dapat menulis kueri mentah:
Semoga jawaban ini bermanfaat. :)
sumber
nullable(false)
menyelamatkan saya dari mencabut rambut saya, karenanullable()
tidak terdokumentasi dengan baik, dan tidak adanotNull()
fungsi.SET FOREIGN_KEY_CHECKS = 0
memberikan kesalahan. Anda mungkin perlu mengubah batasan tabel dengan menggunakan kueri mentah. lihat di sini: postgresql.org/docs/current/static/sql-altertable.htmlSaya berasumsi bahwa Anda mencoba mengedit kolom yang telah Anda tambahkan data, jadi menjatuhkan kolom dan menambahkan lagi sebagai kolom yang tidak dapat dibatalkan tidak mungkin tanpa kehilangan data. Kami akan
alter
kolom yang ada.Namun, pembuat skema Laravel tidak mendukung memodifikasi kolom selain mengganti nama kolom. Jadi, Anda harus menjalankan kueri mentah untuk melakukannya, seperti ini:
Dan untuk memastikan Anda masih dapat mengembalikan migrasi Anda, kami akan melakukannya
down()
juga.Satu catatan adalah bahwa karena Anda mengkonversi antara nullable dan tidak nullable, Anda harus memastikan Anda membersihkan data sebelum / setelah migrasi Anda. Jadi lakukan itu di skrip migrasi Anda dengan dua cara:
sumber
query
denganstatement
down
fungsi di blok kode kedua, pernyataan SQL harus diakhiri denganNOT NULL
. (down
Fungsi dalam contoh ketiga benar.)Dia migrasi penuh untuk Laravel 5 :
Intinya, Anda bisa menghapus
nullable
dengan meneruskanfalse
sebagai argumen.sumber
Jika Anda mengubah kolom dan tersandung
maka cukup instal
composer require doctrine/dbal
sumber
Menambahkan ke jawaban Dmitri Chebotarev, seperti untuk Laravel 5+.
Setelah membutuhkan paket doktrin / dbal :
Anda kemudian dapat melakukan migrasi dengan kolom yang dapat dibatalkan, seperti:
Untuk mengembalikan operasi, lakukan:
sumber
Menambahkan ke Dmitri Chebotarev Answer,
Jika Anda ingin mengubah beberapa kolom sekaligus, Anda dapat melakukannya seperti di bawah ini
sumber
Cobalah:
sumber
->change
di bagian akhir dan hanya menyebutkannya Laravel 5+composer require doctrine/dbal
Untuk Laravel 4.2, jawaban Unnawut di atas adalah yang terbaik. Tetapi jika Anda menggunakan awalan tabel, maka Anda perlu sedikit mengubah kode Anda.
Dan untuk memastikan Anda masih dapat mengembalikan migrasi Anda, kami akan melakukannya
down()
juga.sumber