Laravel में सुरक्षित रूप से माइग्रेशन निकालें


206

लारवेल में, माइग्रेशन बनाने के लिए एक कमांड प्रतीत होता है, लेकिन हटाना नहीं।

माइग्रेशन कमांड बनाएँ:

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. संगीतकार ऑटोलॉड फ़ाइलों को रीसेट करें: composer dump-autoload
  3. आराम करें। |

यदि आपने माइग्रेशन चलाया है ( php artisan migrate), तो आप ऐसा कर सकते हैं:

a) रन migrate:rollback- यह अंतिम माइग्रेशन को पूर्ववत करने का सही तरीका है (Thnx @Jakobud)

बी) अगर migrate:rollbackकाम नहीं करता है, तो इसे मैन्युअल रूप से करें (मुझे माइग्रेट के साथ बग याद है: पिछले संस्करणों में रोलबैक):

  1. के तहत मैन्युअल रूप से माइग्रेशन फ़ाइल हटाएं app/database/migrations/my_migration_file_name.php
  2. संगीतकार ऑटोलॉड फ़ाइलों को रीसेट करें: composer dump-autoload
  3. अपने डेटाबेस को संशोधित करें: माइग्रेशन तालिका से अंतिम प्रविष्टि निकालें

2
धन्यवाद। माइग्रेशन हटाने के बाद मेरे लिए गोट्चा संगीतकार डंप-
ऑटोलॉड

7
यदि आपने माइग्रेशन चलाया migrate:rollbackहै, तो माइग्रेशन को रोलबैक करने के लिए "उचित" तरीका है , फिर माइग्रेशन फ़ाइल को हटा दें और ऑटोलैड को डंप करें। डीबी या माइग्रेशन टेबल को हैक करने की आवश्यकता नहीं है।
जेक विल्सन

(php कारीगर माइग्रेट) (Y) के बाद के चरणों के लिए महान जवाब
इमरान खान

मेरे भगवान और मैंने गलत होने पर खुद को सताया। धन्यवाद।
पाब्लो कॉन्ट्रेरेस

4. DB से वास्तविक तालिका को हटाएं
जिन

64

यदि माइग्रेशन चलाया गया है (पढ़ें: माइग्रेटेड) तो आपको अपने डेटाबेस टेबल से इतिहास को खाली करने के लिए अपने माइग्रेशन को वापस रोल करना चाहिए। एक बार जब आप वापस लुढ़क जाते हैं, तो आपको अपनी माइग्रेशन फ़ाइल को सुरक्षित रूप से हटाने में सक्षम होना चाहिए और फिर दोबारा माइग्रेट करके आगे बढ़ना चाहिए।


हालाँकि, उन्होंने माइग्रेशन नहीं चलाया है। आप वह नहीं कर सकते जो आपने वास्तव में नहीं किया था, क्या आप कर सकते हैं?
स्टीफन

9
नहीं, आप नहीं कर सकते, लेकिन अगर ऐसा है तो माइग्रेशन डेटाबेस में कोई इतिहास संग्रहीत नहीं होना चाहिए जिसका अर्थ है कि आप फ़ाइल को सुरक्षित रूप से हटा सकते हैं।
जेसन लुईस

14
 php artisan migrate:fresh

काम करना चाहिए, यदि आप विकास में हैं और वांछित परिणाम सभी को शुरू करना है।

उत्पादन में, शायद वह वांछित वस्तु नहीं है, इसलिए आपको विज्ञापन देना चाहिए। (माइग्रेट: ताजा कमांड डेटाबेस से सभी तालिकाओं को छोड़ देगा और फिर माइग्रेट कमांड निष्पादित करेगा)।


5
3 अपवोट? ओपी ने एक माइग्रेशन को हटाने का तरीका पूछा, पूरे डेटाबेस को नष्ट और ताज़ा नहीं किया। यह भयानक सलाह है, जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं।
Goodbytes

कृपया माइग्रेट के बीच के अंतर के बारे में पढ़ें : ताज़ा करें और माइग्रेट करें: ताज़ा जिसे आपने पहले वर्णन करने के लिए देखा था, बाद में आंशिक रूप से मैन्युअल काम से बचने के लिए आंशिक रीसेट करता है!
जोश

1
माइग्रेट: ताजा तुरंत सभी टेबल को गिरा देता है और माइग्रेशन को फिर से चलाता है जैसे कि पहली बार चल रहा हो। इसके बारे में कुछ भी आंशिक नहीं है .. कोई भी डेटा चला जाएगा। यह समस्या को ठीक कर देगा लेकिन यह सवाल का एक वैध जवाब नहीं है।
गुडबाइट्स

12

आपको माइग्रेशन तालिका से प्रविष्टि को हटाने की आवश्यकता है।


7

मैंने गलती से दो बार create_users_table बनाया। इसने कुछ वर्गों को पछाड़ दिया और ErrorException में रोलबैक किया।

आपको क्या करने की आवश्यकता है ऑटोलैड_क्लासमैप मिल रहा है। विक्रेता / संगीतकार फ़ोल्डर में देखें और कोड की विशिष्ट पंक्ति देखें।

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

और पथ संपादित करें। तब आपका रोलबैक ठीक होना चाहिए।


यदि आप - जैसे मैंने किया - बस साथ चले गए और एक माइग्रेशन फ़ाइल का नाम बदल दिया, यह वह उत्तर है जिसकी आप तलाश कर रहे हैं! धन्यवाद।
बर्डस

2
आप बस "संगीतकार डंपोटोलोड" भी कर सकते हैं
फूबर

5

मैं वर्तमान उत्तरों से सहमत हूं, मैं अभी थोड़ी और जानकारी जोड़ना चाहता हूं।

एक नया फीचर लारवेल 5.3 और इसके बाद के संस्करण में जोड़ा गया है जो आपको एक सिंगल माइग्रेशन का बैकअप लेने की अनुमति देगा:

php artisan migrate:rollback --step=1

के बाद, मैन्युअल रूप से माइग्रेशन फ़ाइल को हटाएं database/migrations/my_migration_file_name.php

जब आप माइग्रेशन चलाते हैं, तो यह एक बड़ी सुविधा है

इस तरह, आप केवल 2 चरण में लार्वा में प्रवास को सुरक्षित रूप से हटा सकते हैं


0

मैं इसे मैन्युअल रूप से करूंगा

  1. मॉडल को पहले हटाएं (यदि आप नहीं करते हैं) को मॉडल की आवश्यकता है
  2. ...database/migrationsफ़ोल्डर से माइग्रेशन हटाएं
  3. यदि आप पहले ही पलायन कर चुके हैं यानी यदि आप पहले ही दौड़ चुके हैं php artisan migrate, तो अपने phpmyadmin या SQL (जो भी मामला है) में लॉग इन करें और अपने डेटाबेस में, माइग्रेशन द्वारा बनाई गई तालिका को हटा दें
  4. अभी भी आपके डेटाबेस में, माइग्रेशन फ़ोल्डर में, उस माइग्रेशन फ़ाइल नाम के साथ पंक्ति का पता लगाएं और पंक्ति को हटा दें।

मेरे लिए काम करता है, आशा है कि यह मदद करता है!


-2

यह मेरे लिए काम करता है:

  1. मैंने अपने डेटाबेस की सभी तालिकाएँ हटा दीं, मुख्यतः माइग्रेशन टेबल।
  2. php artisan migrate:refresh

लार्वा में 5.5.43

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.