मैं माइग्रेशन का उपयोग करके लारवेल में कॉलम का नाम कैसे बदल सकता हूं?


92

मेरे पास उल्लेखित कॉलम के रूप में कॉलम हैं:

public function up()
{
    Schema::create('stnk', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('no_reg', 50)->unique();
        $table->string('no_bpkb', 50)->unique();
        $table->string('nama_pemilik', 100);
        $table->string('alamat');
        $table->string('merk', 50);
        $table->string('tipe', 50);
        $table->string('jenis', 50);
        $table->smallInteger('tahun_pembuatan');
        $table->smallInteger('tahun_registrasi');
        $table->smallInteger('isi_silinder');
        $table->string('no_rangka', 50);
        $table->string('no_mesin', 50);
        $table->string('warna', 50);
        $table->string('bahan_bakar', 50);
        $table->string('warna_tnkb', 50);
        $table->string('kode_lokasi', 50);
        $table->date('berlaku_sampai');
        $table->timestamps();

        $table->index('created_at');
        $table->index('updated_at');
    });

}

मैंने स्टनर टेबल के लिए सीडर बनाया है

अब मैं नाम बदलना चाहते हैं idकरने के लिए id_stnk
मैं एक जोड़ दिया है "सिद्धांत / dbal" में "संगीतकार" और एक कर composer update

मैंने प्रवास किया है php artisan migration:make rename_column
फिर मैंने rename_column में नई विधि जोड़ी है:

Schema::table('stnk', function(Blueprint $table)
{
    $table->renameColumn('id', 'id_stnk');

});

और फिर मैंने कमांड चलाने की कोशिश की है, php artisan migrateलेकिन मुझे उल्लेख के अनुसार त्रुटि मिली:

[Ulluminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql -447_33' to './my_database/stnk' (error: 150) (SQL: ALTER TABLE stnk CHANGE id id_stnk INT UNSIGENED AUTO_INCREMENT NOT NULL)

[PDOException]
SQLSTATE[HY000]: General error: 1025  Error on rename  of './my_database/#sql -447_33' to './my_database/stnk' (error: 150)

जवाबों:


120

आपको एक और माइग्रेशन फ़ाइल बनाने की आवश्यकता है - और इसे वहां रखें:

Daud

Laravel 4:    php artisan migrate:make rename_stnk_column
Laravel 5:    php artisan make:migration rename_stnk_column

फिर नई माइग्रेशन फ़ाइल जगह के अंदर:

class RenameStnkColumn extends Migration
{

    public function up()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id', 'id_stnk');
        });
    }


    public function down()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id_stnk', 'id');
        });
    }

}

मैंने अपने प्रश्न को ऊपर संपादित किया है, अब देखें .. मेरे पास gitbash में त्रुटि संदेश है
एरसा

त्रुटि 150 एक विदेशी कुंजी संयम है। इसका मतलब है कि आपके पास अन्य टेबल हैं जो टेबल idपर संदर्भ देते हैं stnk
लॉरेंस

3
लारवेल 5 के लिए ध्यान दें यह अब है make:migrationऔर नहींmigrate:make
जेसन

9
काम करने के लिए नाम बदलने वाले कॉलम के लिए, आपको एक पैकेज की आवश्यकता होती है जिसे L5 में हटा दिया गया था "doctrine/dbal": "~2.3"इसके बिना आपको कुछ बहुत अस्पष्ट त्रुटियां मिलती हैं। यह एक बग यहाँ के रूप में उठाया गया था github.com/laravel/framework/issues/3116 दस्तावेज में और एक यकीनन कम उपयोगी उल्लेख के साथ यहाँ laravel.com/docs/5.0/schema#renaming-columns
जेसन

एक बार माइग्रेशन हो जाने के बाद, क्या फाइल को डिलीट कर देना चाहिए और ओरिजिनल क्रिएट स्कीमा अपडेट कर दी जानी चाहिए? बस यह पूछने के लिए कि चीजों को कैसे साफ रखा जाए
कक्षा

31

पहली बात यह है कि आप अपनी माइग्रेशन फ़ाइल बनाना चाहते हैं।

अपनी कमांड लाइन में टाइप करें

php artisan make:migration rename_stk_column --table="YOUR TABLE" --create

फ़ाइल बनाने के बाद। डेटाबेस / माइग्रेशन के तहत अपने ऐप फ़ोल्डर में नई बनाई गई माइग्रेशन फ़ाइल खोलें।

अपने अप मेथड में यह डालें:

Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id', 'id_stnk');
    });
}

और अपने नीचे विधि में:

    Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id_stnk', 'id);
    });
}

फिर अपनी कमांड लाइन में बस टाइप करें

php artisan migrate

फिर वल्लाह! आपने आईडी का नाम बदलकर id_stnk कर दिया है। BTW आप उपयोग कर सकते हैं

php artisan migrate:rollback

परिवर्तनों को पूर्ववत करने के लिए। सौभाग्य


मैंने अपना प्रश्न ऊपर संपादित किया है, अब देखो .. मेरे पास gitbash में त्रुटि संदेश है
एरसा

1
अपने कंपोज़र.जसन फ़ाइल में सिद्धांत / अस्पष्ट निर्भरता जोड़ना सुनिश्चित करें।
बेन

19

क्रमशः नाम बदलने की माइग्रेशन फ़ाइल के लिए इन चरणों का पालन करें।

1- क्या आपके प्रोजेक्ट में Doctrine / dbal लाइब्रेरी है। यदि आपने पहले कमांड नहीं चलाई है

composer require doctrine/dbal

2- अपडेट पुरानी माइग्रेशन फ़ाइल के लिए अपडेट माइग्रेशन फ़ाइल बनाएं। चेतावनी (उसी नाम की आवश्यकता है)

php artisan make:migration update_oldFileName_table

उदाहरण के लिए मेरा पुराना माइग्रेशन फ़ाइल नाम: create_users_table अपडेट फ़ाइल नाम चाहिए: update_users_table

3- update_oldNameFile_table.php

Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});

'मेरे पुराने कॉलम नाम से' और 'मेरे नए कॉलम नाम' से

4- अंत में माइग्रेट कमांड चलाएं

php artisan migrate

स्रोत लिंक: लार्वा दस्तावेज़


14

नामकरण कॉलम (लारवेल 5.x)

किसी स्तंभ का नाम बदलने के लिए, आप स्कीमा बिल्डर पर renameColumn पद्धति का उपयोग कर सकते हैं। * एक कॉलम का नाम बदलने से पहले, अपने कंपोजर.जॉसन फ़ाइल में सिद्धांत / अस्पष्ट निर्भरता जोड़ना सुनिश्चित करें । *

या आप बस संगीतकार का उपयोग कर पैकेज की आवश्यकता कर सकते हैं ...

composer require doctrine/dbal

स्रोत: https://laravel.com/docs/5.0/schema#renaming-columns

नोट: उपयोग मेक: माइग्रेशन और माइग्रेट नहीं : लारवेल 5.x के लिए करें


जिस तालिका को आप संपादित करने का प्रयास कर रहे हैं, उसमें ENUM के रूप में किसी भी कॉलम का उपयोग न करें। Doctrine / dbal को नहीं पता कि यह क्या है ..... मुझे शुरू में सही नाम होने के लिए मूल माइग्रेशन को बदलना पड़ा और पूरे डेटाबेस को रीसेट करना पड़ा। लकी मैं अभी भी विकास में था। हालांकि मैं लारवेल एंड कंपनी को शुरू से ही संगीतकार के रूप में निर्भर बनाना चाहूंगा।
मिकोप

@mikoop यह मूल ढांचे के पुराने संस्करणों में शुरू से निर्भरता थी। लेकिन यह निर्भरता बहुत भारी है और आमतौर पर इस्तेमाल नहीं की जाती है। इसलिए इसे हटा दिया गया है। (यह सारांश है; निर्णय से पहले बहुत चर्चा हुई थी। वास्तव में, समुदाय ने इसे हटाने के लिए कहा है, और सुना गया है।)
जे। ब्रूनी

renameColumn को सिद्धांत में हटा दिया गया था, और वर्तमान में हटा दिया गया था।
Sander Visser

10

मेरे $ 0.02 को यहाँ फेंकने के बाद से कोई भी जवाब काम नहीं किया, लेकिन मुझे सही रास्ते पर भेजा। क्या हुआ था कि एक पिछले विदेशी बाधा त्रुटि फेंक रहा था। जाहिर है जब आप इसके बारे में सोचते हैं।

इसलिए अपने नए माइग्रेशन की upविधि में, पहले उस मूल बाधा को छोड़ें, कॉलम का नाम बदलें, फिर नए कॉलम नाम के साथ फिर से बाधा जोड़ें। में downविधि, आप ठीक विपरीत इतना है कि यह वापस बेचा सेटिंग करने के लिए करते हैं।

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['server_id']);

        // Rename
        $table->renameColumn('server_id', 'linux_server_id');

        // Add it
        $table->foreign('linux_server_id')->references('id')->on('linux_servers');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['linux_server_id']);

        // Rename
        $table->renameColumn('linux_server_id', 'server_id');

        // Add it
        $table->foreign('server_id')->references('id')->on('linux_servers');
    });
}

उम्मीद है कि यह भविष्य में किसी को बचाता है!


1

उपरोक्त उत्तर बहुत अच्छा है या यदि यह आपको चोट नहीं पहुंचाएगा, तो माइग्रेशन को रोलबैक करें और नाम बदलें और माइग्रेशन फिर से चलाएँ।

 php artisan migrate:rollback

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