Masalah
Menambah lajur baru ke migrasi Laravel anda adalah perkara biasa. Aplikasi dimaksudkan untuk diskalakan yang bermaksud bahawa menambahkan ciri baru mengembangkan aplikasi anda lebih jauh.
Selalunya, pembangun Laravel baru perlu menjalankan migrasi mereka tetapi mereka tidak memastikan bahawa migrasi dapat bergulir dan berpindah berkali-kali tanpa melanggar apa-apa.
Walaupun itu bukan fokus kami, saya rasa penting untuk menyatakannya sebelum kita menghadapi masalah kita.
Berikut ini adalah masalah umum yang akan cuba dilakukan oleh pembangun Laravel baru apabila mereka ingin menambahkan lajur baru ke jadual yang ada.
Jadi pada ketika ini mereka sudah melakukan sesuatu seperti:
fungsi awam meningkat ()Skema :: create ('organisasi', fungsi ($ table)
$ table-> kenaikan ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);
Ini akan membuat jadual baru untuk mereka. Dan untuk menjadikannya bersih, anda juga harus menambah fungsi turun dan hanya menjatuhkan keseluruhan jadual anda dalam kes ini. Fungsi turun akan dijalankan semasa anda ingin memutar balik migrasi anda.
Melompat semua itu, masalah sebenarnya muncul apabila mereka melupakan satu lajur dan mereka ingin menambahkannya selepas itu sehingga mereka membuat fail migrasi baru (kelas) cuba menjalankan sesuatu seperti:
fungsi awam meningkat ()Skema :: create ('organisasi', fungsi ($ table)
$ table-> integer ('size') -> nullable ();
);
Mereka berharap dapat menambahkan ukuran lajur baru ke jadual yang ada.
Sekarang mari kita lihat apa yang berlaku dan bagaimana mencegahnya daripada berlaku lagi.
Penyelesaian
Masalah utama di sini ialah apa yang sering kali dilupakan oleh pembangun baru yang merupakan nama kaedah statik Skema . Anda hanya menggunakan buat ketika anda mula-mula membuat jadual anda. Sekiranya anda perlu mengemas kini jadual anda pada bila-bila masa, anda mahu menggunakan jadual sebagai gantinya.
Oleh itu, fungsi up sebenarnya harus seperti ini:
fungsi awam meningkat ()Skema :: jadual ('organisasi', fungsi ($ jadual)
$ table-> integer ('size') -> nullable ();
);
Fungsi turun seperti ini:
fungsi awam turun ()Skema :: jadual ('organisasi', fungsi ($ jadual)
$ table-> dropColumn ('size');
);
Cadangan peribadi saya kepada anda adalah bahawa setelah anda membuat fail migrasi baru (mengubah) anda lakukan perkara berikut:
- Jalankan penghijrahan
- Periksa sama ada lajur ditambahkan ke jadual
- Rollback migrasi dengan menjalankan php artisan migrate: rollback
- Pastikan tiada apa yang berlaku
- Ulangi langkah 2 dan 3 sekali lagi untuk memastikan anda dapat menutup bulatan penuh migratio
n
Petua lain
Ini akan berguna di peringkat kemudian jika anda mahu mengotomatisasi penggunaan anda dan skrip anda perlu menjalankan rollback.
Petua lain yang dapat saya berikan kepada anda adalah merancang tempat anda mahu meletakkan lajur anda. Hanya dengan melakukan ini, Laravel akan meletakkan lajur baru anda di hujung, mungkin selepas lajur_ditambah. (Kebanyakan jadual mempunyai ini)
Anda ingin menggunakan kaedah selepas itu supaya kod akhir anda akan kelihatan seperti ini:
fungsi awam meningkat ()Skema :: jadual ('organisasi', fungsi ($ jadual)
$ table-> integer ('size') -> after ('name') -> nullable ();
);
Dalam kes ini, Laravel akan meletakkan lajur baru anda tepat selepas lajur nama sehingga kelihatan bagus dan tersusun dengan lebih baik.