Laravel'de taşımayı güvenle kaldırın


206

Laravel'de, taşıma oluşturmak için bir komut var gibi görünüyor, ancak kaldırılmıyor.

Taşıma komutu oluştur:

php artisan migrate:make create_users_table

Taşıma işlemini silmek istersem, veritabanı / taşıma klasörü içindeki ilgili taşıma dosyalarını güvenle silebilir miyim?

Taşıma dosyası:

2013_05_31_220658_create_users_table

Yanıtlar:


375

Yanlışlıkla kötü bir ada sahip bir göç oluşturdum (command:) php artisan migrate:make. Ben çalışmadı ( php artisan migrateı çıkarmak için karar,) göçü. Adımlarım:

  1. Altındaki taşıma dosyasını el ile silin app/database/migrations/my_migration_file_name.php
  2. Besteci otomatik yükleme dosyalarını sıfırlayın: composer dump-autoload
  3. Rahatlayın

Taşıma ( php artisan migrate) yöntemini çalıştırdıysanız şunları yapabilirsiniz:

a) Çalıştır migrate:rollback- son geçişi geri almanın doğru yolu (Thnx @Jakobud)

b) Çalışmazsa migrate:rollback, manuel olarak yapın (önceki sürümlerde migrate: rollback ile hataları hatırlıyorum):

  1. Altındaki taşıma dosyasını el ile silin app/database/migrations/my_migration_file_name.php
  2. Besteci otomatik yükleme dosyalarını sıfırlayın: composer dump-autoload
  3. Veritabanınızı değiştirme: Son girişi taşıma tablosundan kaldırın

2
Teşekkürler. Bir göçü sildikten sonra benim için gottcha, besteci dökümü-otomatik
yüklemesini

7
migrate:rollbackTaşıma işlemini çalıştırdıysanız , taşıma işlemini geri almak için "uygun" yol , ardından taşıma dosyasını silin ve otomatik yüklemeyi döküm olarak kullanmaktır. Db veya taşıma tablosunu hacklemenize gerek yok.
Jake Wilson

(php artisan migrate) (Y)
İmran Hanı

Tanrım ve ben yanıldığım zaman kendime işkence ettik. Teşekkür ederim.
Pablo Contreras

4. Gerçek tabloyu DB'den silin
Jin

64

Taşıma çalıştırıldıysa (read: migrated), geçmişi veritabanı tablonuzdan silmek için taşıma işleminizi geri almalısınız. Geri alındıktan sonra taşıma dosyanızı güvenli bir şekilde silmeli ve ardından tekrar taşımaya devam edebilmeniz gerekir.


Yine de göçü yönetmedi. Aslında yapmadığın şeyi geri alamazsın, değil mi?
Stephane

9
Hayır yapamazsınız, ancak durum buysa, taşıma veritabanında depolanmış bir geçmiş olmamalıdır, bu da dosyayı güvenli bir şekilde silebileceğiniz anlamına gelir.
Jason Lewis

14
 php artisan migrate:fresh

İşi yapmalısınız, eğer gelişmekte iseniz ve istenen sonuç baştan başlamaktır.

Üretimde, bu istenen şey olmayabilir, bu yüzden reklam almalısınız. (Migrate: fresh komutu tüm tabloları veritabanından bırakır ve sonra migrate komutunu yürütür).


5
3 oy veriyor? OP, tüm veritabanını yok etmemek ve yenilemek için bir taşıma işlemini silmenin bir yolunu istedi. Bu korkunç bir tavsiye, ne yaptığınızı bilmiyorsanız bunu yapmayın.
Goodbytes

nazikçe migrate: refresh ve migrate: fresh gibi ilkini açıkladığınız arasındaki farkı okuyun , daha sonra manuel çalışmadan kaçınarak kısmi sıfırlama yapar!
joash

1
migrate: fresh, TÜM tabloları hemen bırakır ve taşıma işlemlerini ilk kez çalışıyormuş gibi yeniden çalıştırır. Bu konuda kısmi bir şey yok .. herhangi bir veri kaybolacak. Sorunu çözecektir, ancak bu soruya geçerli bir cevap değildir.
Goodbytes

12

Büyük olasılıkla girişi taşıma tablosundan da silmeniz gerekir.


7

Yanlışlıkla iki kez create_users_table oluşturdum. Bazı sınıfları geçersiz kıldı ve geri almayı ErrorException haline getirdi.

Yapmanız gereken, autoload_classmap.php dosyasını satıcı / besteci klasöründe bulmak ve belirli kod satırını aramaktır.

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

ve yolu düzenleyin. O zaman geri dönüşünüz iyi olmalıdır.


Eğer yaptığım gibi - sadece devam ettiyseniz ve bir göç dosyasını yeniden adlandırdıysanız, aradığınız cevap budur! Teşekkürler.
Berdus

2
Ayrıca sadece "besteci dumpautoload" yapabilirsiniz
FooBar

5

Mevcut cevaplara katılıyorum, biraz daha fazla bilgi eklemek istiyorum.

Laravel 5.3 ve sonraki sürümlerine , tek bir taşımayı geri almanıza olanak tanıyan yeni bir özellik eklendi :

php artisan migrate:rollback --step=1

sonra, altındaki taşıma dosyasını el ile silin database/migrations/my_migration_file_name.php

Bir taşıma işlemi gerçekleştirdiğinizde bu harika bir özellik

Bu şekilde, laravel'deki taşımayı yalnızca 2 adımda güvenle kaldırabilirsiniz


0

Manuel olarak yapmayı tercih ederim

  1. Önce modeli silin (eğer istemiyorsanız) modele artık ihtiyacınız yok
  2. Taşıma işlemini ...database/migrationsklasörden silme
  3. Önceden taşındıysanız, yani zaten çalıştırdıysanız php artisan migrate, phpmyadmin veya SQL'inize (hangi durumda olursa olsun) giriş yapın ve veritabanınızda taşıma tarafından oluşturulan tabloyu silin
  4. Yine de veritabanınızda, taşıma klasöründe, bu taşıma dosyası adının bulunduğu satırı bulun ve satırı silin.

Benim için çalışıyor, umarım yardımcı olur!


-2

Bu benim için çalışıyor:

  1. Veritabanımdaki tüm tabloları, özellikle de taşıma tablosunu sildim.
  2. php artisan migrate:refresh

laravel 5.5.43 içinde

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.