মাইগ্রেশনে বিদ্যমান সারণীতে একটি নতুন কলাম যুক্ত করুন


270

লারাভেল ফ্রেমওয়ার্কটি ব্যবহার করে কীভাবে আমার বিদ্যমান ডাটাবেস টেবিলটিতে একটি নতুন কলাম যুক্ত করব তা আমি বুঝতে পারি না।

আমি ব্যবহার করে মাইগ্রেশন ফাইল সম্পাদনা করার চেষ্টা করেছি ...

<?php

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

টার্মিনালে আমি এক্সিকিউট করি php artisan migrate:installএবং migrate

আমি কীভাবে নতুন কলাম যুক্ত করব?


আপনি যদি যে কোনও ত্রুটি যুক্ত করতে পারেন তবে এটি কার্যকর হবে; আপনি কি ঘটতে প্রত্যাশা করেন; এবং আসলে কি ঘটে?
ফিল স্পার্কস

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

উত্তর:


609

মাইগ্রেশন তৈরি করতে আপনি মাইগ্রেশনটি ব্যবহার করতে পারেন: আর্টিসান সিএলআই-তে আদেশ করুন। বিদ্যমান মডেলগুলির সাথে সংঘর্ষ এড়াতে একটি নির্দিষ্ট নাম ব্যবহার করুন

লারাভেল 3 এর জন্য:

php artisan migrate:make add_paid_to_users

লারাভেল 5+ এর জন্য:

php artisan make:migration add_paid_to_users_table --table=users

তারপরে আপনাকে সেই Schema::table()পদ্ধতিটি ব্যবহার করতে হবে (যেমন আপনি কোনও বিদ্যমান টেবিলটি অ্যাক্সেস করছেন, নতুন তৈরি করছেন না)। এবং আপনি এটির মতো একটি কলাম যুক্ত করতে পারেন:

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

এবং রোলব্যাক বিকল্প যুক্ত করতে ভুলবেন না:

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

তারপরে আপনি আপনার স্থানান্তরগুলি চালাতে পারেন:

php artisan migrate

লারাভেল 3 উভয়ের জন্য ডকুমেন্টেশনে এটি সমস্ত ভালভাবে কভার করা হয়েছে:

এবং লারাভেল 4 / লারাভেল 5 এর জন্য:

সম্পাদনা:

$table->integer('paid')->after('whichever_column');নির্দিষ্ট কলামের পরে এই ক্ষেত্রটি যুক্ত করতে ব্যবহার করুন।


3
ঠিকphp artisan migrate
ফিল স্পার্কস

কিছু একটা সমস্যা. আমি একটি নতুন মাইগ্রেশন ফাইল তৈরি করতে "ডিবি: মেক" করি। এবং তারপরে আমি স্কিমা :: টেবিলটি ('ব্যবহারকারী', ফাংশন ($ টেবিল) {$ টেবিল-> পূর্ণসংখ্যা ('প্রদত্ত');}) রেখেছি; এটার ভিতরে. এবং "পিএইচপি কারিগর মাইগ্রেট" চালান, তবে মারাত্মক ত্রুটি পাওয়া: / অ্যাপ্লিকেশন / এক্সএএমপিপি / এক্সএএমপিপি / এক্সটেনশান / অ্যাডসেন্স / অ্যাডপ্লেসেশন / ইমিগ্রেশনস / ২০১_0-০5-২৩-২২২২২_সরেপ্রেস ক্লাস ব্যবহারকারীদের পুনরায় ক্লেয়ার করতে পারবেন না
কিম লারসেন

মাইগ্রেশন তৈরি করা ডকুমেন্টেশনেও আচ্ছাদিত। আপনার এটিকে আরও নির্দিষ্ট নাম দেওয়া উচিত, "অ্যাড_পেইড_ টু_উজারস" এর মতো, এটি আপনার মডেলের সংঘর্ষের সাথে সংঘর্ষে নেমে আসবে না।
ফিল স্পার্কস

দেখে মনে হচ্ছে যে কোনও লারাভেল 3 ডক ইউআরএল লারাভেল 4 ডক্সে পুনঃনির্দেশ করছে। স্কিমা নির্মাতা এবং মাইগ্রেশনগুলির

6
php artisan make:migration add_paid_to_users
লারাভেল

64

আমি ভবিষ্যতে পাঠকদের জন্য ল্যারাভেল 5.1 এবং তারপরে মাইকে 3875 এর উত্তর যুক্ত করব।

জিনিসগুলি দ্রুত করার জন্য, আপনি পতাকাটি "--table" এর মতো ব্যবহার করতে পারেন:

php artisan make:migration add_paid_to_users --table="users"

এটি স্বয়ংক্রিয়ভাবে upএবং downপদ্ধতির সামগ্রী যুক্ত করবে :

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

একইভাবে, --create["table_name"]নতুন মাইগ্রেশন তৈরি করার সময় আপনি বিকল্পটি ব্যবহার করতে পারেন যা আপনার মাইগ্রেশনগুলিতে আরও বয়লারপ্লেট যুক্ত করবে। ছোট বিন্দু, তবে সেগুলি বোঝার সময় সহায়ক!


2
লারাভেল 5.0-এ এটি ছিল না, Blueprintলারাভেল 5.1-এ যুক্ত হয়েছিল। স্পষ্টকরণের মাত্র একটি পয়েন্ট সমস্ত।
ফিল স্পার্কস

@ ফিলফ স্পার্কস আপনি ঠিক বলেছেন, আমার ভুলটি ধরার জন্য আপনাকে ধন্যবাদ। আমি যে সংস্করণটিতে এটি ব্যবহার করতে পারি তা স্পষ্ট করে আপডেট করেছি।
ক্যামেলকেস

24

যদি আপনি লারাভেল 5 ব্যবহার করেন তবে কমান্ডটি হবে;

php artisan make:migration add_paid_to_users

জিনিস তৈরির সমস্ত কমান্ড (নিয়ন্ত্রক, মডেল, মাইগ্রেশন ইত্যাদি) make:কমান্ডের অধীনে সরানো হয়েছে ।

php artisan migrate যদিও এখনও একই।


24

লারাভেল 5.6 এবং উপরে

আপনি যদি বিদ্যমান সারণীতে বিদেশী কী হিসাবে নতুন কলাম যুক্ত করতে চান তবে।

এই আদেশটি কার্যকর করে একটি নতুন স্থানান্তর তৈরি করুন: করুন: স্থানান্তর

উদাহরণ:

php artisan make:migration add_store_id_to_users_table --table=users

ডাটাবেস / মাইগ্রেশন ফোল্ডারে আপনার নতুন মাইগ্রেশন ফাইল রয়েছে, এরকম কিছু:

2018_08_08_093431_add_store_id_to_users_table.php (মন্তব্য দেখুন)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Create new column
            // You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

            // 2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

            // 1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

            // 2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

এর পরে কমান্ডটি চালান:

php artisan migrate

আপনি যে কোনও কারণে শেষ মাইগ্রেশনটি পূর্বাবস্থায় ফেরাতে চান তবে এই কমান্ডটি চালান:

php artisan migrate:rollback

আপনি ডক্সে মাইগ্রেশন সম্পর্কিত আরও তথ্য পেতে পারেন


1
খুব ব্যাপক এবং প্রাসঙ্গিক উত্তর। ধন্যবাদ!
musicin3d

17

আপনি প্রাথমিক Schema::createপদ্ধতিতে নতুন কলামগুলি এর মতো যুক্ত করতে পারেন :

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

আপনি যদি ইতিমধ্যে একটি সারণী তৈরি করে থাকেন তবে নতুন স্থানান্তর তৈরি করে এবং Schema::tableপদ্ধতিটি ব্যবহার করে আপনি সেই টেবিলটিতে অতিরিক্ত কলাম যুক্ত করতে পারেন :

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

ডকুমেন্টেশন এ সম্পর্কে মোটামুটি পুরোপুরি, এবং সংস্করণ 3 থেকে সংস্করণ 4 তে খুব বেশি পরিবর্তন হয়নি ।


কিছু একটা সমস্যা. আমি একটি নতুন মাইগ্রেশন ফাইল তৈরি করতে "ডিবি: মেক" করি। এবং তারপরে আমি স্কিমা :: টেবিলটি ('ব্যবহারকারী', ফাংশন ($ টেবিল) {$ টেবিল-> পূর্ণসংখ্যা ('প্রদত্ত');}) রেখেছি; এটার ভিতরে. এবং "পিএইচপি কারিগর মাইগ্রেট" চালান, তবে মারাত্মক ত্রুটি পাওয়া: / অ্যাপ্লিকেশন / এক্সএএমপিপি / এক্স্যাম্পপিলেস / এইচডোকসস / অ্যাডসেন্স / অ্যাপ্লিকেশন / ইমিগ্রেশনস २०१3-০5-২৩-২২২২২২_সরেপ্রেস ক্লাস ব্যবহারকারীদের পুনরায় ক্লেয়ার করতে পারবেন না
কিম লারসেন

মাইগ্রেশনগুলির প্রতিটি তৈরি করার সময় তাদের কিছু নাম দেওয়া উচিত। সাধারণত প্রাথমিক তৈরি আমি নাম করব create_users_table, তারপর যদি আমি কলাম যোগ করছি: add_email_password_columns_to_users
tplaner

হ্যাঁ, যেমনটি বিবর্তিত হয়েছে, অবশ্যই মূল লারাভেল ডিজাইনের দর্শনের সাথে আঁকানো এবং add_পরিবর্তনের উপর নজর রাখার জন্য প্রতিটি ফাইলের সামনে " " ক্রিয়াপদ ব্যবহার করা ভাল । এইভাবে সংস্করণ নিয়ন্ত্রণ ইত্যাদির জন্য পরিবর্তনগুলি ট্র্যাক করা সহজ কারণ প্রতিটি পুনরাবৃত্তির জন্য একটি নতুন অ্যাড ফাইল তৈরি করা হয়। আপনি যদি কেবল গিয়ে গিয়ে "সংশোধন" চালিয়ে যান create_তবে জানা যাবে যে এক্স কর্মচারী, কোনও সূচক মুছে ফেলার মাধ্যমে, বা একটি নতুন কলাম ইত্যাদি যুক্ত করে কিছু গণ্ডগোল করেছেন, তা অন্তত আমার মাথায় উপলব্ধি করে! :)
তারে00

7

আপনি কেবলমাত্র আপনার বিদ্যমান মাইগ্রেশন ফাইলটি সংশোধন করতে পারেন, উদাহরণস্বরূপ আপনার টেবিলটিতে একটি কলাম যুক্ত করুন এবং তারপরে আপনার টার্মিনাল টাইপিংয়ে:

$ php artisan migrate:refresh


8
এটি অবিশ্বাস্যরূপে বিপজ্জনক - যদি কিছু লোকের পুরাতন সংস্করণটি চালানো হয় তবে কারও কাছে নতুন থাকে এবং বিশৃঙ্খলা সৃষ্টি হবে। লিকুইবেসে, আপনি যদি কোনও ফাইল সম্পাদনা করেন, তবে এটি ব্যর্থ হবে যদি না আপনি স্পষ্টভাবে এটির অনুমতি ব্যতীত না রেখে থাকেন এবং আপনি খুব কম ক্ষেত্রেই এটি করতে পারেন। উদাহরণস্বরূপ, যদি কোনও ডাটাবেসে ইতিমধ্যে নাল ডেটা থাকে তবে আপনি কলামটি অকার্যকর করেন, এটি ভেঙে যাবে।
জন লিটল

3
আরও ভাল হবে, আপনি যদি নিজের উত্তরটি সম্পাদনা করেন এবং উল্লেখ করেন যে এটি আপনার টেবিলটি খালি করে দেবে, তবে আরও ভাল।
আবেল

দ্রষ্টব্য: এই কমান্ডটি পুরো ডাটাবেস টেবিলগুলি পরিষ্কার করবে , আপনি যদি এটি ব্যবহার করতে চান তবে প্রথমে আপনার ডাটাবেসটি ব্যাকআপ করুন
উদ্ধব সরভাইয়া

5

এই জিনিসগুলি লারাভেল 5.1 এ কাজ করা হয়।

প্রথমে, আপনার টার্মিনালে এই কোডটি কার্যকর করুন

php artisan make:migration add_paid_to_users --table=users

এর পরে আপনার প্রকল্প ডিরেক্টরিতে যান এবং ডিরেক্টরি ডাটাবেস প্রসারিত করুন - মাইগ্রেশন এবং ফাইল add_paid_to_users.php সম্পাদনা করুন, এই কোডটি যুক্ত করুন

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

এর পরে আপনার টার্মিনালে ফিরে যান এবং এই আদেশটি কার্যকর করুন ute

php artisan migrate

এই সাহায্য আশা করি।


5

আপনার পূর্ববর্তী স্থানান্তরকে প্রথমে রোলব্যাক করুন

php artisan migrate:rollback

এর পরে, আপনি আপনার বিদ্যমান মাইগ্রেশন ফাইলটি পরিবর্তন করতে পারেন (নতুন যুক্ত করুন, নাম পরিবর্তন করুন বা কলামগুলি মুছুন) তারপরে আপনার স্থানান্তর ফাইলটি আবার চালান

php artisan migrate

0

যদিও অন্যদের উল্লেখ করেছেন মাইগ্রেশন ফাইলটি সর্বোত্তম অনুশীলন, একটি চিম্টিতে আপনি টিঙ্কার সহ একটি কলামও যুক্ত করতে পারেন।

$ php artisan tinker

এখানে টার্মিনালের জন্য ওয়ান-লাইনারের উদাহরণ রয়েছে:

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ $table->integer('paid'); })



(এখানে এটি পাঠযোগ্যতার জন্য ফর্ম্যাট করা হয়েছে)

Schema::table('users', function(\Illuminate\Database\Schema\Blueprint $table){ 
    $table->integer('paid'); 
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.