मुझे लारवेल में माइग्रेशन कार्य करने के लिए "संगीतकार डंप-ऑटोलॉड" कमांड क्यों चलाना है?


80

मैंने अपने एप्लिकेशन में कुछ माइग्रेशन क्लासेस का निर्माण किया है, जिनकी मुझे जरूरत है, लेकिन मैं गलतियाँ करता रहता हूँ। मुझे यह कमांड चलाने की आवश्यकता है:

composer dump-autoload

तभी यह फिर से उम्मीद के मुताबिक काम करता है। क्या मैं कुछ गलत कर रहा हूं जो इस त्रुटि को उत्पन्न करता है या यह पलायन के साथ एक सामान्य व्यवहार है?

नीचे माइग्रेशन प्रक्रिया चलाते समय मिलने वाली त्रुटि है:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  

क्या आप प्रवासन के लिए phpartisan का उपयोग कर रहे हैं?
डुनेना

हाँ, मैं इसे बनाने के लिए तालिका बनाने के लिए और प्रवास को चलाने के लिए उपयोग कर रहा हूँ
हसन अल-नटौर

क्या आपके पास Illuminate \ Database \ स्कीमा \ Blueprint का उपयोग है; इल्यूमिनेट \ डेटाबेस \ माइग्रेशन \ माइग्रेशन का उपयोग करें; अपनी फ़ाइल के अंदर और माइग्रेशन वर्ग का विस्तार कर रहे हैं?

हाँ, "इल्युमिनेट \ डेटाबेस \ स्कीमा \ ब्लूप्रिंट का उपयोग करें" और "इलुमिनाएट \ डेटाबेस \ माइग्रेशन \ माइग्रेशन" का उपयोग करें।
हसन अल-नटूर

आमतौर पर जब मैं माइग्रेशन फ़ाइल बनाता हूं, तो वे इस कोडशेयर के समान दिखते हैं ।io / 3iRxd एक नज़र डालें और देखें कि क्या आपका समान पैटर्न अनुसरण करता है, यदि आपको यह सुनिश्चित करने की आवश्यकता नहीं है कि आप माइग्रेशन क्लास का विस्तार कर रहे हैं। क्या सब कुछ ठीक लग रहा है?
डुनेना

जवाबों:


95

ठीक है, इसलिए मुझे लगता है कि मुझे पता है कि आप इस मुद्दे को ले रहे हैं।

मूल रूप से, क्योंकि कंपोज़र आपके द्वारा बनाई जा रही माइग्रेशन फ़ाइलों को नहीं देख सकता है, आप डंप-ऑटोलैड कमांड को चला रहे हैं जो कुछ भी नया डाउनलोड नहीं करेगा, लेकिन सभी वर्गों के लिए इसे फिर से शामिल करने की आवश्यकता है। यह केवल उन सभी वर्गों की सूची को पुन: बनाता है, जिन्हें प्रोजेक्ट (autoload_classmap.php) में शामिल करने की आवश्यकता है, और यही कारण है कि आपका माइग्रेशन उस कमांड को चलाने के बाद काम कर रहा है।

इसे कैसे ठीक करें (संभवतः) आपको अपने संगीतकार.जसन फ़ाइल में कुछ अतिरिक्त जानकारी जोड़ने की आवश्यकता है।

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}

आपको अपने माइग्रेशन फ़ोल्डर के पथ को क्लासमेट सरणी में जोड़ना होगा। फिर निम्नलिखित तीन कमांड चलाएं ...

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

यह वर्तमान संकलित फ़ाइलों को साफ़ कर देगा, उन कक्षाओं को अपडेट करें जिनकी ज़रूरत है और फिर उन्हें वापस लिखें ताकि आपको फिर से ऐसा न करना पड़े।

आदर्श रूप से, आप composer dump-autoload -oअपने वेबपृष्ठों के तेज़ लोड के लिए निष्पादित करते हैं। एकमात्र कारण यह डिफ़ॉल्ट नहीं है, यह इसलिए है क्योंकि इसे उत्पन्न करने में थोड़ा अधिक समय लगता है (लेकिन केवल थोड़ा सा ध्यान देने योग्य है)।

आशा है कि आप इसे क्रमबद्ध करने के लिए प्रबंधित कर सकते हैं, क्योंकि इसकी बहुत कष्टप्रद बात है :(


6
मुझे समझ में नहीं आता कि लार्वा ने इसे क्यों नहीं उठाया, इसका एक शानदार ढांचा।
हसन अल-नटौर

मेरे पास पहले से ही इस के साथ मेरी कंपोजर.जॉसन फ़ाइल है: "ऑटोलॉड": {"क्लासमेट": ["डेटाबेस"], "psr-4": {"App \\": "app /"}},
हसन अल- नटूर

मुझे रास्ता कैसे जोड़ना चाहिए?
हसन अल-नटौर

मुझे "php कारीगर डंप-ऑटोलॉड" चलाने में त्रुटि हुई: [InvalidArgumentException] कमांड "डंप-ऑटोलॉड" परिभाषित नहीं है।
हसन अल-नटौर

4
क्षमा करें, आपको संगीतकार का उपयोग करने की आवश्यकता है, न कि कारीगर की। तो इसके संगीतकार डंप-
ऑटोलॉड

2

आपको दौड़ना चाहिए:

composer dump-autoload

और अगर आपको काम नहीं करना चाहिए:

re-install composer

2

संक्षिप्त उत्तर: पीएसआर ऑटोलडिंग गतिशील है जबकि क्लासमैप स्थिर हैं।

यदि आप क्लासमैप का उपयोग नहीं करना चाहते हैं, तो इसके बजाय PSR ऑटोलडिंग का उपयोग करें।

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