ลบการโยกย้ายอย่างปลอดภัยใน Laravel


206

ใน Laravel ดูเหมือนว่าจะมีคำสั่งสำหรับสร้างการย้ายข้อมูล แต่ไม่ใช่การลบ

สร้างคำสั่งโยกย้าย:

php artisan migrate:make create_users_table

หากฉันต้องการลบการย้ายข้อมูลฉันสามารถลบไฟล์การโยกย้ายที่เกี่ยวข้องภายในโฟลเดอร์ฐานข้อมูล / การย้ายข้อมูลได้อย่างปลอดภัยหรือไม่

ไฟล์การโยกย้าย:

2013_05_31_220658_create_users_table

คำตอบ:


375

ฉันตั้งใจสร้างการย้ายถิ่นที่มีชื่อที่ไม่ดี (คำสั่งphp artisan migrate:make) ฉันไม่ได้ทำการphp artisan migrateโยกย้าย( ) การย้ายดังนั้นฉันตัดสินใจที่จะลบ ขั้นตอนของฉัน:

  1. ลบไฟล์การโยกย้ายด้วยตนเองภายใต้ app/database/migrations/my_migration_file_name.php
  2. รีเซ็ตไฟล์ autoload ผู้แต่ง: composer dump-autoload
  3. ผ่อนคลาย

หากคุณทำการโยกย้าย ( php artisan migrate) คุณสามารถทำได้:

a) Run migrate:rollback- เป็นวิธีที่เหมาะสมในการเลิกทำการโยกย้ายครั้งล่าสุด (ขอบคุณ @Jakobud)

b)หากmigrate:rollbackใช้งานไม่ได้ให้ทำด้วยตนเอง (ฉันจำข้อบกพร่องที่มีการโยกย้าย: ย้อนกลับในรุ่นก่อนหน้า):

  1. ลบไฟล์การโยกย้ายด้วยตนเองภายใต้ app/database/migrations/my_migration_file_name.php
  2. รีเซ็ตไฟล์ autoload ผู้แต่ง: composer dump-autoload
  3. แก้ไขฐานข้อมูลของคุณ: ลบรายการสุดท้ายออกจากตารางการย้ายข้อมูล

2
ขอบคุณ Gottcha สำหรับฉันหลังจากการลบการย้ายข้อมูลถูกลืมที่จะเรียกใช้นักแต่งเพลงถ่ายโอนข้อมูลอัตโนมัติ
Theo Kouzelis

7
หากคุณเรียกใช้การโยกย้ายวิธีที่ "เหมาะสม" คือการเรียกใช้migrate:rollbackเพื่อย้อนกลับการโยกย้ายจากนั้นลบไฟล์การย้ายข้อมูลและการถ่ายโอนข้อมูลอัตโนมัติ ไม่จำเป็นต้องแฮ็คฐานข้อมูลหรือตารางการย้ายข้อมูล
Jake Wilson

คำตอบที่ดีสำหรับขั้นตอนหลังจาก (php artisan migrate) (Y)
Imran Khan

พระเจ้าของฉันและฉันทรมานตนเองเมื่อฉันผิด ขอบคุณ.
Pablo Contreras

4. ลบตารางจริงออกจาก DB
Jin

64

หากการย้ายข้อมูลถูกเรียกใช้ (อ่าน: ย้ายข้อมูล) คุณควรย้อนกลับการโยกย้ายเพื่อล้างประวัติจากตารางฐานข้อมูลของคุณ เมื่อย้อนกลับมาแล้วคุณควรจะสามารถลบไฟล์การโยกย้ายของคุณได้อย่างปลอดภัยแล้วทำการโอนย้ายอีกครั้ง


แม้ว่าเขาจะไม่ได้ย้ายข้อมูลก็ตาม คุณไม่สามารถย้อนกลับสิ่งที่คุณไม่ได้ทำจริงได้ไหม
Stephane

9
ไม่คุณไม่สามารถทำได้ แต่ถ้าเป็นเช่นนั้นไม่ควรมีประวัติเก็บไว้ในฐานข้อมูลการย้ายข้อมูลซึ่งหมายความว่าคุณสามารถลบไฟล์ได้อย่างปลอดภัย
Jason Lewis

14
 php artisan migrate:fresh

ควรทำงานถ้าคุณอยู่ในการพัฒนาและผลลัพธ์ที่ต้องการคือการเริ่มต้นใหม่

ในการผลิตนั่นอาจไม่ใช่สิ่งที่ต้องการดังนั้นคุณควรโฆษณา (คำสั่งโยกย้าย: สดจะวางตารางทั้งหมดจากฐานข้อมูลแล้วดำเนินการคำสั่งโยกย้าย)


5
โหวตขึ้น 3 อัน? OP ขอวิธีลบการย้ายข้อมูลไม่ใช่ทำลายและรีเฟรชฐานข้อมูลทั้งหมด นี่คือคำแนะนำอันยิ่งใหญ่อย่าทำสิ่งนี้จนกว่าคุณจะรู้ว่าคุณกำลังทำอะไรอยู่
Goodbytes

กรุณาอ่านเกี่ยวกับความแตกต่างระหว่างการโยกย้าย: การรีเฟรชและการโยกย้าย: ความสดใหม่ที่คุณเห็นว่าจะอธิบายเป็นครั้งแรกการรีเซ็ตบางส่วนในภายหลังจะหลีกเลี่ยงการทำงานด้วยตนเอง!
joash

1
โยกย้าย: สดลดลงทันทีทุกตารางและเรียกใช้การโยกย้ายอีกครั้งราวกับว่าทำงานเป็นครั้งแรก ไม่มีอะไรเป็นส่วนหนึ่งของมัน .. ข้อมูลใด ๆ จะหายไป มันจะแก้ไขปัญหา แต่ไม่ใช่คำตอบที่ถูกต้องสำหรับคำถาม
Goodbytes


7

ฉันตั้งใจสร้างสองครั้ง create_users_table มันแทนที่คลาสบางส่วนและเปลี่ยนการย้อนกลับเป็น ErrorException

สิ่งที่คุณต้องทำคือค้นหา autoload_classmap.php ในโฟลเดอร์ผู้จำหน่าย / ผู้แต่งและค้นหาบรรทัดรหัสเฉพาะเช่น

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

และแก้ไขเส้นทาง จากนั้นการย้อนกลับของคุณควรจะดี


ถ้าคุณ - อย่างที่ฉันทำ - แค่ไปและเปลี่ยนชื่อไฟล์การโยกย้ายนี่คือคำตอบที่คุณกำลังมองหา! ขอบคุณ
Berdus

2
คุณสามารถทำได้ง่ายๆเพียงแค่ "นักแต่งเพลงทิ้ง"
FooBar

5

ฉันเห็นด้วยกับคำตอบปัจจุบันฉันแค่ต้องการเพิ่มข้อมูลอีกนิด

มีการเพิ่มฟีเจอร์ใหม่ในLaravel 5.3 และเวอร์ชันที่สูงกว่าซึ่งจะช่วยให้คุณสามารถทำการโยกย้ายครั้งเดียว:

php artisan migrate:rollback --step=1

หลังจากนั้นให้ลบไฟล์การโยกย้ายด้วยตนเองภายใต้ database/migrations/my_migration_file_name.php

นี่เป็นคุณสมบัติที่ยอดเยี่ยมสำหรับเมื่อคุณทำการโยกย้าย

ด้วยวิธีนี้คุณสามารถลบการย้ายข้อมูลใน laravel ได้อย่างปลอดภัยใน 2 ขั้นตอนเท่านั้น


0

ฉันจะทำเอง

  1. ลบแบบจำลองก่อน (ถ้าคุณไม่ต้องการ) ต้องใช้แบบจำลองอีกต่อไป
  2. ลบการโยกย้ายจาก...database/migrationsโฟลเดอร์
  3. หากคุณย้ายข้อมูลไปแล้วเช่นถ้าคุณใช้งานอยู่php artisan migrateให้ลงชื่อเข้าใช้ phpmyadmin หรือ SQL (แล้วแต่กรณี) และในฐานข้อมูลของคุณลบตารางที่สร้างโดยการย้ายข้อมูล
  4. ยังอยู่ในฐานข้อมูลของคุณในโฟลเดอร์การย้ายข้อมูลให้ค้นหาแถวด้วยชื่อไฟล์การโยกย้ายนั้นและลบแถว

ใช้งานได้สำหรับฉันหวังว่ามันจะช่วย!


-2

สิ่งนี้ใช้ได้กับฉัน:

  1. ฉันลบตารางทั้งหมดในฐานข้อมูลของฉันส่วนใหญ่เป็นตารางการย้ายข้อมูล
  2. php artisan migrate:refresh

ใน laravel 5.5.43

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.