लारवेल 5.4 विशिष्ट तालिका प्रवासन


85

हाय यहाँ https://laravel.com/docs/5.4/migrations में सभी शामिल प्रलेखन पढ़ें ।

क्या एक निश्चित माइग्रेशन फ़ाइल (केवल 1 माइग्रेशन) पर माइग्रेट करने का एक तरीका है, अभी हर बार कारण है कि मेरे द्वारा उपयोग किया जाने वाला परिवर्तन है php artisan migrate:refreshऔर सभी फ़ील्ड रीसेट हो रहे हैं।

जवाबों:


133

पहले आपको migrationअपनी तालिका के लिए एक फ़ाइल बनानी चाहिए जैसे:

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

माइग्रेशन फ़ोल्डर में टेस्ट फोल्डर बनाने के बाद फिर नए बनाए गए माइग्रेशन को टेस्ट फोल्डर में स्थानांतरित / कॉपी किया जाता है और आपके टर्मिनल / सेमी में कमांड के नीचे चलाया जाता है जैसे:

php artisan migrate --path=/database/migrations/test/

धन्यवाद। यही वह है जिसकी तलाश में मैं हूं।
सादिक़

4
php कारीगर माइग्रेट --path = डेटाबेस / माइग्रेशन / टेस्ट / मेरे लिए काम करता है
Joyal

यदि यह काम नहीं कर रहा है, तो आपके पास stackoverflow.com/questions/19102197/…
हरि हरकर

76

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

php artisan migrate:refresh --path=/database/migrations/fileName.php

1
अच्छा काम आदमी। कुछ भी काम नहीं किया लेकिन आप समाधान काम कर रहे हैं। बहुत बहुत धन्यवाद।
विप्रचेतप्रो

बिल्कुल मैं देख रहा था :) थैंक
यू

कुछ समय बाद यह डेटाबेस / माइग्रेशन / fileName.php 1 बैकस्लैश के बिना होगा
अहमद अबाउद

यह उल्लेख के लायक है कि एक ताज़ा आपके डेटा के साथ चला गया है। आपको अपने db में डेटा को एक निर्यात के रूप में सहेजना चाहिए और यदि आप अपना डेटा रखना चाहते हैं तो रिफ्रेश होने के बाद इसे आयात करें।
तरणीस

@Taranis बस तालिका के डेटा है कि आप सभी नहीं ताज़ा कर रहे हैं
wissem SASSI

54

बस migrationsअपने डेटाबेस में तालिका देखें, माइग्रेशन फ़ाइल नाम और बैच संख्या मान की एक सूची होगी।

मान लीजिए कि आपके पास निम्नलिखित संरचना है,

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

यदि आप केवल रोलबैक 2016_09_07_103432_create_tabel_rolesमाइग्रेशन करना चाहते हैं , तो माइग्रेशन बैच मान को 2 में बदलें, जो सभी के बीच उच्चतम है और उसके बाद बस निष्पादित करें।

php artisan migrate:rollback

यहां केवल बैच वैल्यू 2 वाली तालिका को वापस ले जाया जाएगा। अब, उस तालिका में परिवर्तन करें और कंसोल कमांड का पालन करें।

php artisan migrate

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

हालाँकि टेबल संरचना के बीच संबंध के कारण हर बार बैच नंबर को बदलना अच्छा नहीं है, हम इस मामले का उपयोग कुछ मामलों के लिए कर सकते हैं जहाँ सिंगल टेबल रोलबैक टेबल के बीच अखंडता का उल्लंघन नहीं करता है।

उम्मीद है आप समझ गए होंगे।


@MartneyAcha मुझे खुशी है कि आपने अपनी समस्या का समाधान प्राप्त कर लिया है चीयर्स !!
सागर गौतम

अच्छी व्याख्या। यदि आपकी टेबल में एक विदेशी संबंध है, तो वह काम नहीं करेगा
ओग्बोना विटालिस

@OgbonnaVitalis धन्यवाद, यह स्वतंत्र तालिकाओं के लिए आसान तरीका होगा। स्वीकृत उत्तर रोलबैक और एकल तालिका को स्थानांतरित करने का सटीक तरीका देता है। कई स्वतंत्र तालिका के लिए यह काम करेगा।
सागर गौतम

14

यदि आप स्वतः पूर्ण के लिए टैब का उपयोग करते हैं

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'

मेरे लिए काम नहीं करता है, का उपयोग करते हुए zsh
digout

8

आपको फ़ाइल को नई निर्देशिका में डालना होगा (उदा: चयनित) और फिर आवेदन करना होगा

php artisan migrate  --path=/database/migrations/selected

अगर आपको रोलबैक चाहिए:

php artisan migrate:rollback  --path=/database/migrations/selected

ध्यान दें:

php artisan migrate:refresh

यह रोलबैक करेगा और फिर डिफ़ॉल्ट निर्देशिका (/ डेटाबेस / माइग्रेशन) में सभी माइग्रेशन फ़ाइलों को माइग्रेट करेगा


कोई नई निर्देशिका बनाने की आवश्यकता नहीं है जिसे आप सीधे फ़ाइल नाम जैसे '--path = / database / migrations / fileName.php' में डाल सकते हैं।
विस्मिल एसएएसएसआई

8

आप इस तरह कमांड चला सकते हैं

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php

7
php artisan help migrate

आपको विकल्प दिखाई देगा:

--पथ [= पथ] माइग्रेशन फ़ाइलों को निष्पादित करने के लिए पथ

वैसे, आप संभवतः उस फ़ाइल के रूट फ़ोल्डर को इंगित कर सकते हैं जिसे आप माइग्रेट करना चाहते हैं:

php artisan migrate --path=/database/migrations/sample.php

या, आप माइग्रेशन में एक नया फ़ोल्डर बना सकते हैं, उसके बाद आपके द्वारा वांछित सभी माइग्रेशन फ़ाइलों को माइग्रेट करें:

php artisan migrate --path=/database/migrations/new_folder

तुम सिर्फ एक 's' से चूक गए। यह 'पलायन' होना चाहिए! php कारीगर माइग्रेट --path = / database / migrations / new_folder
पासिंदू जयनाथ

php कारीगर माइग्रेट --path = / database / migrations / new_folder / need last '/'
Pasindu Jayanath

5

बस एक और समाधान पोस्ट करना चाहता था, जो मुझे लगता है कि ध्यान देने योग्य है।

  1. माइग्रेशन तालिका में अपने माइग्रेशन नाम के साथ पंक्ति खोजें और इसे DELETE करें। यह इस तरह दिखना चाहिए: 2016_06_01_000001_create_oauth_auth_codes_table
  2. डेटाबेस से अपनी तालिका निकालें जैसे DROP TABLE oauth_auth_codes
  3. रन php कारीगर पलायन

यह केवल आपके द्वारा आवश्यक तालिका को माइग्रेट करेगा, और कुछ और नहीं छूएगा


3

आप केवल रोलबैक कर सकते हैं:

php artisan migrate:rollback

https://laravel.com/docs/5.4/migrations#rolling-back-migrations

आप निर्दिष्ट कर सकते हैं कि 'चरण' विकल्प का उपयोग करके वापस जाने के लिए कितने माइग्रेशन हैं:

php artisan migrate:rollback --step=1

कुछ ट्रिक्स यहाँ उपलब्ध हैं:

लारवेल में रोलबैक एक विशिष्ट प्रवासन


3

तालिका हटाएँ और माइग्रेशन तालिका से उसका रिकॉर्ड निकालें।

उसके बाद आप बस फिर से माइग्रेशन चलाते हैं:

php artisan migrate

3

सुधार- डेटाबेस से पहले स्लैश हटा दें

$ php artisan migrate --path=database/migrations/migration.php

1
माइग्रेट करने के लिए कुछ भी नहीं।
राशि


3

यदि आप एक और विशिष्ट तालिका बनाना चाहते हैं। आप इस कोड का उपयोग कर सकते हैं। यह लार्वेल (5.x) संस्करणों के लिए काम करता है।

php artisan migrate:refresh --path=/database/migrations/fileName.php

2

या आप "माइग्रेशन" तालिका में बस अपने डेटाबेस से माइग्रेशन फ़ाइल का नाम हटा सकते हैं और फिर चला सकते हैं: php आर्टिट्सन माइग्रेशन


1

आप उस विशिष्ट उप-फ़ोल्डर को परिभाषित करने के लिए --path = विकल्प का उपयोग करने का प्रयास कर सकते हैं जिसे आप वहां पर विशिष्ट माइग्रेशन निष्पादित करना चाहते हैं।

वैकल्पिक रूप से आपको डीबी और माइग्रेशन टेबल से संदर्भ और तालिकाओं को हटाने की आवश्यकता होगी जो आदर्श नहीं है: /


1

यदि आप दूसरी तालिका बनाना चाहते हैं, तो एक नई माइग्रेशन फ़ाइल बनाएँ। यह काम करेगा।

आप एक प्रवास नामित बनाते हैं users_tableके साथ id, first_name, last_name। आप एक माइग्रेशन फ़ाइल बना सकते हैं जैसे

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

यदि आप माइग्रेट के बिना "स्थिति" की तरह एक और दायर करना चाहते हैं: ताज़ा करें। आप एक और माइग्रेशन फ़ाइल बना सकते हैं जैसे "add_status_filed_to_users_table"

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('status');
    });
} 

और रोलबैक विकल्प जोड़ना न भूलें:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('status');
    });
}

और जब आप माइग्रेट चलाते हैं php artitsan migration, तो यह नई माइग्रेशन फ़ाइल को माइग्रेट करता है।

लेकिन यदि आप पहली बार दर्ज की गई फ़ाइल (users_table) में "स्थिति" दर्ज करते हैं और माइग्रेशन चलाते हैं। यह माइग्रेट करने के लिए कुछ भी नहीं है। आपको दौड़ने की जरूरत है php artisan migrate:refresh

उममीद है कि इससे मदद मिलेगी।



1

php कारीगर माइग्रेट --path = / database / migrations / fileName.php

बस निर्देशों का पालन करें इस कमेंट फ़ाइल के नाम को निष्पादित करें यहां आपका माइग्रेशन टेबल नाम होना चाहिए उदाहरण: php कारीगर माइग्रेट --path = / डेटाबेस / माइग्रेशन / 2020_02_21_101937_create_jobs_table_for.php



0

आप केवल अपने टर्मिनल में इस कमांड को चला सकते हैं

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

माइग्रेशन के बाद आपको विशेष फ़ाइल नाम रखना चाहिए। या यदि आपके पास माइग्रेशन के अंदर कोई फ़ोल्डर है तो माइग्रेशन के बाद केवल उस फ़ोल्डर का नाम जोड़ें।

इस कदर

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

मुझे उम्मीद है कि यह आपको एक lil बिट में मदद करेगा। हैप्पी कोडिंग।


-1

पहले आपको निम्नलिखित कमांड बनाने चाहिए:

चरण 1:

php artisan migrate:rollback

चरण 2:

php artisan migrate

आपकी तालिका डेटाबेस में वापस आ जाएगी।


यदि आप प्रत्येक चरण में छोटा विवरण रखते हैं तो यह अधिक उपयोगी होगा। यह उपयोगकर्ता को समझने में मदद करेगा कि वास्तव में क्या हो रहा है। यह एक चीट-कोड जैसा दिखता है जो जादुई रूप से चीजों को काम करता है, लेकिन परिणाम कुछ मामलों में विनाशकारी हो सकता है।
अश्वनी अग्रवाल

कृपया प्रश्न को ध्यान से पढ़ें, उस व्यक्ति ने केवल एक टेबल के लिए कहा, आपकी विधि सभी माइग्रेशन को रोलबैक कर देगी और फिर सभी टेबल बना देगी। साथ ही php artisan migration:refreshसेवा भी करता है।
वजाहत हाशमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.