মাইগ্রেশন ব্যবহার করে আমি কীভাবে লারাভেলে কলামটির নাম পরিবর্তন করতে পারি?


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
আমি "সুরকার" এ একটি "মতবাদ / ডাবল" যুক্ত করেছি এবং একটি করি ।composer update

আমি মাইগ্রেশন করেছি php artisan migration:make 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

আপনাকে অন্য একটি মাইগ্রেশন ফাইল তৈরি করতে হবে - এবং এটি এখানে স্থাপন করতে হবে:

চালান

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');
        });
    }

}

আমি উপরে আমার প্রশ্নটি সম্পাদনা করেছি, এখনই দেখুন .. আমার গীটব্যাশ
আরিয়াস

ত্রুটি 150 হ'ল বিদেশী কী বাধা। এর মানে আপনি অন্য টেবিল রেফারেন্স আছে idউপর stnkটেবিল।
লরেন্স

4
লারাভেল 5 এর জন্য নোট এটি এখন make:migrationএবং নাmigrate:make
জেসন

9
কাজ করার জন্য কলামটির নাম বদলে দেওয়ার জন্য, আপনার দরকার এমন একটি প্যাকেজ প্রয়োজন যা এল 5 এ মুছে ফেলা হয়েছিল তবে "doctrine/dbal": "~2.3"আপনি কিছু খুব অস্পষ্ট ত্রুটি পান। এটি এখানে একটি বাগ হিসাবে উত্থাপিত হয়েছিল github.com/laravel/framework/issues/3116 এবং এখানে ডকুমেন্টেশনে একটি যুক্তিযুক্ত কম দরকারী উল্লেখ সহ laravel.com/docs/5.0/schema#renaming- কলামগুলি
জেসন

মাইগ্রেশন হয়ে গেলে, ফাইলটি মুছে ফেলা এবং আসল তৈরির স্কিমা আপডেট করা উচিত? কীভাবে জিনিসগুলিকে পরিষ্কার রাখতে হবে তা জিজ্ঞাসা করছেন
কক্ষপথ

30

আপনি যে কাজটি করতে চান তা হ'ল আপনার মাইগ্রেশন ফাইল তৈরি করা।

আপনার কমান্ড লাইনে টাইপ করুন

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 এ আইডি নাম পরিবর্তন করেছেন। বিটিডাব্লু আপনি ব্যবহার করতে পারেন

php artisan migrate:rollback

পরিবর্তনগুলি পূর্বাবস্থায় ফেরাতে। গুডলাক


আমি উপরে আমার প্রশ্নটি সম্পাদনা করেছি, এখনই দেখুন .. আমার গীটব্যাশটিতে ত্রুটি বার্তা রয়েছে
আরিয়াস

4
আপনার রচনা / জেসন ফাইলে মতবাদ / ডাবল নির্ভরতা যুক্ত করতে ভুলবেন না।
বেন

19

কলাম স্থানান্তর ফাইলটির নাম পরিবর্তনের জন্য যথাক্রমে এই পদক্ষেপগুলি অনুসরণ করুন।

1- আপনার প্রকল্পে মতবাদ / ডবল লাইব্রেরি আছে? আপনি যদি কমান্ডটি প্রথমে চালনা না করেন

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)

কোনও কলামটির নাম পরিবর্তন করতে, আপনি স্কিমা নির্মাতায় পুনর্নবীকরণ কলাম পদ্ধতিটি ব্যবহার করতে পারেন। * কলামটির নাম পরিবর্তন করার আগে মতবাদ / ডাবল যুক্ত করতে ভুলবেন না আপনার রচয়িতা ফাইলে নির্ভরতা *

অথবা আপনি কেবল সুরকার ব্যবহার করে প্যাকেজটির প্রয়োজন ...

composer require doctrine/dbal

সূত্র: https://laravel.com/docs/5.0/schema#renaming-colums

দ্রষ্টব্য: ব্যবহার করুন: মাইগ্রেশন এবং মাইগ্রেশন নয় : লারাভেল ৫.x এর জন্য তৈরি করুন


আপনি যে টেবিলটি সম্পাদনা করতে চাইছেন তাতে ENUM হিসাবে কোনও কলামই ব্যবহার করবেন না। মতবাদ / ডাবল জানেনা এটি কী ..... আমার শুরুতে সঠিক নাম হতে আসল মাইগ্রেশনটি পরিবর্তন করতে হয়েছিল এবং পুরো ডাটাবেসটি পুনরায় সেট করতে হয়েছিল। ভাগ্যবান আমি তখনও উন্নয়নে ছিলাম। আমি কি যদিও লারাভেল এন্ড কো শুরু থেকেই সুরকারকে এটি নির্ভরতা তৈরি করব?
মিকোপ

@ মিকুপ এটি মূলত ফ্রেমওয়ার্কের পূর্ববর্তী সংস্করণগুলিতে শুরু থেকেই নির্ভরতা ছিল। তবে এই নির্ভরতা খুব ভারী এবং সাধারণত ব্যবহৃত হয় না। সুতরাং এটি সরানো হয়েছে। (এই সংক্ষিপ্তসারটি; সিদ্ধান্তের আগে প্রচুর আলোচনা হয়েছিল fact বাস্তবে জনগোষ্ঠী এটি অপসারণের জন্য বলেছে, এবং শুনেও শোনা গেছে))
জে ব্রুনি

পুনঃনামকরণ কলামটি মতবাদে অবহেলা করা হয়েছিল এবং বর্তমানে সরানো হয়েছে।
স্যান্ডার দর্শনার্থী

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

আমি উপরে আমার প্রশ্নটি সম্পাদনা করেছি, এখনই দেখুন .. আমার গীটব্যাশ
আরিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.