saya ingin
untuk mengembalikan saja:
Rolled back: 2015_05_15_195423_alter_table_web_directories
saya berlari
php artisan migrate:rollback
, 3 migrasi saya bergulir kembali.
Rolled back: 2015_05_15_195423_alter_table_web_directories
Rolled back: 2015_05_13_135240_create_web_directories_table
Rolled back: 2015_05_13_134411_create_contacts_table
saya hapus
baik meja web_directories
saya maupun contacts
meja saya secara tidak sengaja. Saya tidak pernah ingin itu terjadi, dan jika saya hanya bisa mengembalikan yang spesifik, bencana ini tidak akan pernah terjadi.
laravel
laravel-4
laravel-5
database-migration
cyber8200
sumber
sumber
Jawaban:
Jika Anda melihat di
migrations
tabel Anda , maka Anda akan melihat setiap migrasi memiliki nomor batch. Jadi ketika Anda memutar kembali, itu memutar kembali setiap migrasi yang merupakan bagian dari kumpulan terakhir.Jika Anda hanya ingin mengembalikan migrasi terakhir, maka tambahkan nomor batch satu per satu. Kemudian lain kali Anda menjalankan
rollback
perintah, itu hanya akan mengembalikan migrasi yang satu itu karena itu dalam "batch" sendiri.sumber
migrations
SET UPDATEbatch
= 2 WHEREmigration
= 'name_of_the_migration';Laravel 5.3+
Kembalikan satu langkah. Secara asli.
Dan ini halaman manualnya: docs .
Laravel 5.2 dan sebelumnya
Tidak ada cara untuk melakukan tanpa kerumitan. Untuk detailnya, periksa jawaban Martin Bean .
sumber
Setiap kali Anda mengembalikan, Anda mendapatkan kumpulan migrasi terakhir. gunakan perintah
sumber
Jika Anda tidak dapat melakukan apa yang diperintahkan oleh @Martin Bean, maka Anda dapat mencoba trik lain.
Buat migrasi baru dan pada file itu di atas () metode memasukkan apa yang ada di bawah () metode migrasi yang Anda ingin kembalikan dan di bawah () metode memasukkan apa yang ada di atas () metode.
mis. jika migrasi asli Anda seperti ini
maka dalam file migrasi baru lakukan ini
dan kemudian jalankan migrasi, itu akan menghapus tabel. dan jika Anda menginginkannya kembali, kembalikan saja.
sumber
lebih baik menggunakan refresh migrasi
jika tidak, gunakan rollback migrasi
untuk detail lebih lanjut tentang migrasi, lihat
sumber
Cara terbaik adalah membuat migrasi baru dan membuat perubahan yang diperlukan di dalamnya.
Penanganan kasus terburuk ( jika Anda memiliki akses ke DB plus Anda setuju dengan RESET dari data tabel itu ):
your-specific-migration
your-specific-migration
php artisan migrate --path=/database/migrations/your-specific-migration.php
Ini akan memaksa laravel untuk menjalankan migrasi spesifik itu karena tidak ada entri tentang itu ada dalam riwayat migrasi Laravel
PEMBARUAN : Cara Laravel (Terima kasih, @ thiago-valente)
Lari:
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
lalu:
php artisan migrate
Ini akan menjalankan kembali migrasi tertentu
sumber
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
Dan akhirnyaphp artisan migrate
Mungkin agak terlambat untuk menjawab pertanyaan ini, tetapi ini cara yang sangat bagus, bersih dan efisien untuk melakukannya. Saya akan berusaha selengkap mungkin.
Sebelum membuat migrasi Anda, buat direktori yang berbeda seperti:
Kemudian, ketika membuat migrasi Anda, jalankan perintah berikut (menggunakan tabel Anda sebagai contoh):
atau
atau
Perintah di atas akan membuat file migrasi di dalam jalur direktori yang diberikan. Kemudian Anda cukup menjalankan perintah berikut untuk memigrasi file Anda melalui direktori yang ditentukan.
* Catatan: Anda dapat mengubah batch_1 menjadi batch_2 atau batch_3 atau apa pun nama folder tempat Anda menyimpan file migrasi tersebut. Asalkan tetap berada di dalam basis data / migrasi direktori atau direktori tertentu.
Selanjutnya jika Anda ingin mengembalikan migrasi spesifik Anda, Anda dapat mengembalikan secara batch seperti yang ditunjukkan di bawah ini:
atau
atau
Menggunakan teknik-teknik ini akan memungkinkan Anda lebih banyak fleksibilitas dan kontrol atas database Anda dan setiap modifikasi yang dibuat untuk skema Anda.
sumber
Kembalikan satu langkah. Secara asli.
Kembalikan dua langkah. Secara asli.
sumber
Gunakan perintah "php artisan migrate: rollback --step = 1" untuk mengembalikan migrasi ke 1 langkah mundur.
Untuk info lebih lanjut, periksa tautan: - https://laravel.com/docs/master/migrations#running-migrations
sumber
Jika Anda ingin mengembalikan migrasi terakhir.
Jika Anda ingin mengembalikan migrasi tertentu kemudian pergi ke tabel migrasi dan atur nilai tertinggi dari catatan itu dalam batch. Kemudian.
Saat ini saya sedang mengerjakan laravel 5.8 jika tidak bekerja versi laravel lainnya, mohon informasikan kepada saya.
sumber
Bermigrasi tabel satu per satu.
Ubah nomor batch migrasi yang ingin Anda kembalikan ke tertinggi.
Jalankan migrasi: kembalikan.
Mungkin bukan cara yang paling nyaman untuk berurusan dengan proyek yang lebih besar.
sumber
Jika Anda ingin memodifikasi file migrasi asli dan memigrasikannya kembali, Anda dapat menggunakan paket ini untuk bermigrasi. (Berlaku untuk Laravel 5.4 atau lebih baru)
Pertama, instal paket di proyek Laravel Anda:
Daftarkan perintah di
app/Console/Kernel.php
:Sekarang, jalankan perintah ini untuk memigrasi file Anda
sumber
php artisan:migrate --path=database/migrations/my_migration.php
. Tepat sebelum Anda melakukannya, pastikanmigrations
tabel tidak memiliki entri untukmy_migration
.sesuatu seperti ini
sumber
1.) Di dalam database, buka tabel migrasi dan hapus entri migrasi yang terkait dengan tabel yang ingin Anda jatuhkan.
Contoh gambar tabel migrasi
2.) Selanjutnya, hapus tabel yang terkait dengan migrasi yang baru saja Anda hapus dari instruksi 1.
Hapus contoh gambar tabel
3.) Akhirnya, lakukan perubahan yang Anda inginkan ke file migrasi dari tabel yang Anda hapus dari instruksi no. 2 kemudian jalankan
php artisan migrate
untuk memigrasi tabel lagi.sumber
Seperti yang dinyatakan dalam manual Laravel , Anda dapat mengembalikan jumlah migrasi tertentu menggunakan
--step
opsisumber
Alternatif lain dari yang disebutkan jika Anda perlu melakukan ini beberapa kali dengan migrasi yang sama. Secara pribadi saya pikir ini menambah banyak fleksibilitas untuk migrasi Anda.
Tambahkan
database/migrations
ke objek autoload Anda dicomposer.json
seperti ini:Kemudian tambahkan
namespace Database\Migrations;
ke semua file migrasi Anda.Kemudian jalankan
$ composer dump-autoload
untuk menyegarkancomposer.lock
file Anda .Kemudian, dengan asumsi nama kelas Anda untuk migrasi adalah
AlterTableWebDirectories
, Anda bisa membuat perintah seperti ini:Dan tuliskan logika ini dalam
handle()
metode Anda :Ini akan melakukan apa yang Anda inginkan. Jika Anda ingin mengurangi jumlah migrasi alih-alih menghapusnya, Anda mungkin dapat mengetahui cara mengubah
DB:raw
perintah.Perintah ini dapat diperluas untuk memungkinkan Anda memilih migrasi mana yang Anda buang secara dinamis dengan mengirimkan argumen ke dalam perintah.
Kemudian ketika Anda membaca untuk memigrasi file itu lagi, Anda bisa menjalankannya
php artisan migrate
dan hanya akan memigrasikan file itu.Proses ini memungkinkan Anda untuk membuat perubahan spesifik pada migrasi tanpa harus melakukan penyegaran penuh dan seed setiap kali.
Secara pribadi saya perlu melakukan itu banyak karena benih saya agak besar.
sumber
sumber
Jika Anda memiliki akses ke DB, Anda memiliki solusi yang lebih mudah. Anda dapat menghapus catatan dari tabel migrasi dan kemudian cukup letakkan tabel. dengan klien SQL.
Dan bisa digunakan
Suka banyak jawaban. Dan ingat jalannya adalah Lokasi. Anda bahkan dapat menghapus migrasi modul seperti ini. (Setiap migrasi dari anywhare)
Dan ingat, Jika Anda menggunakan server linux berhati-hati tentang sensitivitas huruf. Anda harus menambahkan seperti / Database / Migrasi dengan modal awal.
sumber