2016-03-20 8 views
7

कहें, मेरे पास एकल तालिका अपडेट करने वाली एकाधिक माइग्रेशन फ़ाइलें हैं।लार्वा माइग्रेट - एक से अधिक माइग्रेशन (फाइलें)

उदा।

 
2016_03_20_072730_create_tasks_table.php 
2016_03_20_075467_create_tasks_table.php 

... जो विभिन्न टीम सदस्यों द्वारा रेपो से आया था। प्रत्येक तालिका में कुछ समायोजित कर रहा है, उदा। एक कॉलम जोड़ना

मैं करने का प्रयास करते:

php artisan migrate

मैं त्रुटि:

 
PHP Fatal error: Cannot declare class CreateTasksTable, because the name is 
eady in use in U:\www\b10\database\migrations\2016_03_20_072737_create_tasks_ 
le.php on line 30 


    [Symfony\Component\Debug\Exception\FatalErrorException] 
    Cannot declare class CreateTasksTable, because the name is already in use 

कैसे ऊपर वर्णित के रूप में स्थिति के साथ एक सौदा करना चाहिए?

2016_03_20_072730_create_tasks_table.php:

 
class CreateTasksTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('tasks', function ($table) 
     { 
      $table->string('task1'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('tasks'); 
    } 
} 

2016_03_20_075467_create_tasks_table.php:

 
class CreateTasksTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
    Schema::table('tasks', function ($table) 
     { 
      $table->string('task2'); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('tasks'); 
    } 
} 

उत्तर

7

प्रत्येक माइग्रेशन एक अद्वितीय वर्ग के नाम होना आवश्यक है

संपादित

यहाँ कोड है। दूसरे को कुछ समझदार, जैसे 2016_03_20_075467_add_task2_to_tasks_table और AddTask2ToTasksTable पर पुनर्नामित करें, फिर लार्वेल को परिवर्तन ढूंढने के लिए composer dump-autoload चलाएं। अब आप माइग्रेट कर सकते हैं।

संपादित करें: अब दोनों माइग्रेशन कोड को प्रश्न में संपादित किया गया है, मैं देख सकता हूं कि पहले माइग्रेशन में एक ही समस्या है, और इसका नाम बदलकर उसी तरह किया जाना चाहिए। शायद कुछ समय पहले एक प्रारंभिक निर्माण माइग्रेशन है। आपको create के साथ कुछ भी संपादन माइग्रेशन नामकरण करना बंद कर देना चाहिए, क्योंकि आप वास्तव में तालिका नहीं बना रहे हैं।

+0

हां, मैं त्रुटि से एक ही निष्कर्ष पर आया, लेकिन माइग्रेट हाथ से डीबी करने से इतना बड़ा माना जाता था। माना जाता है कि आपको केवल नवीनतम रेपो मिलना चाहिए, माइग्रेट चलाएं और एक बियर लें। लेकिन इसके साथ, ऐसा लगता है कि हाथ से अद्यतन "कटा हुआ रोटी के बाद से सुपर-बेस्ट चीज" के पीछे नहीं हैं;) अब, आपको माइग्रेट फ़ाइल को समायोजित करना होगा, माइग्रेट फाइलों को गठबंधन करना होगा, या प्रत्येक को अस्थायी रूप से ले जाना होगा और उपयोग करना होगा - -पथ, आदि। तो, मुझे लगता है कि यह एक नींबू है। लोटसा बात, थोड़ा संभाल। जब तक कोई आसान तरीका न हो - इसलिए मेरा प्रश्न। – Jeffz

+0

यह आसान है - आपको बस अपने माइग्रेशन को तार्किक रूप से नाम देना होगा। आपको डेटाबेस में कुछ भी करने की ज़रूरत नहीं है। आइए इसे इस तरह से रखें: मॉडलों के साथ काम करना वाकई आसान है। लेकिन यदि आप दो मॉडलों को एक ही चीज़ का नाम देने का प्रयास करते हैं, तो यह काम नहीं करेगा। क्या आप तर्क देंगे कि मॉडलों के साथ काम करने में भी मुश्किल होती है? :) बस अपने टीम के सदस्यों को अलग-अलग माइग्रेशन के लिए अलग-अलग नाम देने के लिए सिखाएं और यह सचमुच आपको जो भी चाहिए वह सब कुछ है। –

+1

माइग्रेशन फ़ाइलों को लार्वेल द्वारा स्वतः बनाया गया है। चूंकि एक सृजन शॉर्टकट है, क्या लैरवेल के लिए क्लास नाम में कुछ यादृच्छिक स्ट्रिंग/हैश जोड़ना बहुत कठिन होगा? जब तक कि इस प्रक्रिया के खिलाफ चीखने वाली कोई चीज न हो। आपके समय के लिए जोएल धन्यवाद। – Jeffz

संबंधित मुद्दे