Hapus migrasi dengan aman di Laravel

206

Di Laravel, tampaknya ada perintah untuk membuat migrasi, tetapi tidak menghapus.

Buat perintah migrasi:

php artisan migrate:make create_users_table

Jika saya ingin menghapus migrasi, dapatkah saya menghapus file migrasi yang sesuai dengan aman di dalam database / folder migrasi?

File migrasi:

2013_05_31_220658_create_users_table
Globalz
sumber

Jawaban:

375

Saya tidak sengaja membuat migrasi dengan nama yang buruk (perintah:) php artisan migrate:make. Saya tidak menjalankan ( php artisan migrate) migrasi, jadi saya memutuskan untuk menghapusnya. Langkah saya:

  1. Hapus secara manual file migrasi di bawah app/database/migrations/my_migration_file_name.php
  2. Setel ulang file autoload komposer: composer dump-autoload
  3. Bersantai

Jika Anda menjalankan migrasi ( php artisan migrate), Anda dapat melakukan ini:

a) Jalankan migrate:rollback- ini adalah cara yang tepat untuk membatalkan migrasi terakhir (Thnx @Jakobud)

b) Jika migrate:rollbacktidak berhasil, lakukan secara manual (saya ingat bug dengan migrasi: rollback di versi sebelumnya):

  1. Hapus secara manual file migrasi di bawah app/database/migrations/my_migration_file_name.php
  2. Setel ulang file autoload komposer: composer dump-autoload
  3. Ubah database Anda: Hapus entri terakhir dari tabel migrasi
malisokan
sumber
2
Terima kasih. Gottcha bagi saya setelah menghapus migrasi lupa menjalankan komposer dump-autoload
Theo Kouzelis
7
Jika Anda telah menjalankan migrasi, cara yang "tepat" adalah menjalankan migrate:rollbackuntuk mengembalikan migrasi, lalu hapus file migrasi dan dump autoload. Tidak perlu meretas db atau tabel migrasi.
Jake Wilson
jawaban yang bagus untuk langkah-langkah setelah (php artisan migrate) (Y)
Imran Khan
Ya Tuhan dan aku menyiksa diriku sendiri ketika aku salah. Terima kasih.
Pablo Contreras
4. Hapus tabel aktual dari DB
Jin
64

Jika migrasi telah dijalankan (baca: dimigrasikan) maka Anda harus memutar kembali migrasi Anda untuk menghapus riwayat dari tabel database Anda. Setelah Anda mundur, Anda seharusnya dapat menghapus file migrasi Anda dengan aman dan kemudian melanjutkan dengan migrasi lagi.

Jason Lewis
sumber
Dia belum menjalankan migrasi. Anda tidak dapat memutar balik apa yang sebenarnya tidak Anda lakukan, bukan?
Stephane
9
Tidak, Anda tidak bisa, tetapi jika itu masalahnya maka seharusnya tidak ada riwayat yang disimpan dalam database migrasi yang berarti Anda dapat menghapus file dengan aman.
Jason Lewis
14
 php artisan migrate:fresh

Harus melakukan pekerjaan itu, jika Anda dalam pengembangan dan hasil yang diinginkan adalah untuk memulai dari awal.

Dalam produksi, itu mungkin bukan hal yang diinginkan, jadi Anda harus beriklan. (Perintah migrasi: baru akan menghapus semua tabel dari database dan kemudian menjalankan perintah migrasi).

joash
sumber
5
3 upvotes? OP meminta cara untuk menghapus migrasi, tidak menghancurkan dan menyegarkan seluruh basis data. Ini saran yang buruk, jangan lakukan ini kecuali Anda tahu apa yang Anda lakukan.
Selamat tinggal
silakan baca tentang perbedaan antara migrasi: menyegarkan dan bermigrasi: segar Anda terlihat menggambarkan yang pertama, yang kemudian dalam cara melakukan reset parsial menghindari pekerjaan manual!
joash
1
bermigrasi: segar segera menjatuhkan SEMUA tabel dan menjalankan kembali migrasi seolah-olah berjalan untuk pertama kalinya. Tidak ada yang parsial tentang itu .. data apa pun akan hilang. Itu akan memperbaiki masalah tetapi itu bukan jawaban yang valid untuk pertanyaan itu.
Selamat tinggal
12

Anda mungkin perlu menghapus entri dari tabel migrasi juga.

Stephane
sumber
7

Saya tidak sengaja membuat dua kali create_users_table. Itu mengesampingkan beberapa kelas dan mengubah rollback menjadi ErrorException.

Yang perlu Anda lakukan adalah menemukan autoload_classmap.php di folder vendor / composer dan mencari baris kode tertentu seperti

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

dan edit jalur. Maka kembalikan Anda harus baik-baik saja.

JR Tan
sumber
Jika Anda - seperti yang saya lakukan - hanya pergi dan mengganti nama file migrasi ini adalah jawaban yang Anda cari! Terima kasih.
Berdus
2
Anda juga bisa hanya cukup melakukan "komposer dumpautoload"
FooBar
5

Saya setuju dengan jawaban saat ini, saya hanya ingin menambahkan sedikit informasi.

Fitur baru telah ditambahkan ke Laravel 5.3 dan versi di atas yang akan memungkinkan Anda untuk mundur satu migrasi:

php artisan migrate:rollback --step=1

setelah itu, secara manual menghapus file migrasi di bawah database/migrations/my_migration_file_name.php

Ini adalah fitur hebat ketika Anda menjalankan migrasi

Dengan cara ini, Anda dapat menghapus migrasi dalam laravel dengan aman hanya dalam 2 langkah

Udhav Sarvaiya
sumber
0

Saya lebih suka melakukannya secara manual

  1. Hapus model terlebih dahulu (jika tidak) perlu model itu lagi
  2. Hapus migrasi dari ...database/migrations folder
  3. Jika Anda sudah bermigrasi yaitu jika Anda sudah menjalankan php artisan migrate , login ke phpmyadmin atau SQL Anda (mana pun masalahnya) dan dalam database Anda, hapus tabel yang dibuat oleh migrasi
  4. Masih dalam database Anda, di folder migrasi, cari baris dengan nama file migrasi itu dan hapus baris itu.

Bekerja untuk saya, semoga membantu!

DAVID AJAYI
sumber
-2

Ini bekerja untuk saya:

  1. Saya menghapus semua tabel di basis data saya, terutama tabel migrasi.
  2. php artisan migrate:refresh

di laravel 5.5.43

ederrafo
sumber