লারাভেল মাইগ্রেশনে কলাম কমনীয় নয় Make


126

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

কোন সাহায্য প্রশংসা করা হবে।


এই প্রশ্নের জন্য সবচেয়ে সম্পূর্ণ উত্তর এখানে পাওয়া যাবে: stackoverflow.com/a/32568625/4908847
szaman

উত্তর:


228

লারাভেল 5 এর আগে স্কিমা নির্মাতা ব্যবহার করে কোনও বিদ্যমান টেবিল কলাম পরিবর্তন করার কোনও লারাভেল নেটিভ উপায় ছিল না। এর জন্য আপনার কাঁচা ক্যোয়ারী ব্যবহার করা দরকার।

তবে লারাভেল 5 হিসাবে আপনি ব্যবহার করতে পারেন:

$table->...->nullable(false)->change();

1
আমি এটিও পেয়েছি। স্কিমা নির্মাতার পক্ষে কলাম সংজ্ঞা পরিবর্তনের জন্য অনুমতি দেওয়ার জন্য একটি দুর্দান্ত স্পর্শ হবে যা এটি সমর্থন করে বলে মনে হয় না। আমি নিশ্চিত যে আমার মতো আরও অনেকে রয়েছেন যারা স্ক্র্যাচ থেকে কেবল সারণী তৈরি করে নয়, বিদ্যমান ডিবি সংশোধন করতে স্কিমা নির্মাতা ব্যবহার করছেন।
শান দ্য শিম

3
টেলর ওটওয়েল (লারাভেলের স্রষ্টা) 6 দিন আগে (2014-05-09) বলেছেন: "আমি এখনও আমার এই বক্তব্যের পাশে দাঁড়িয়েছি যে কেউ যদি সফলভাবে এবং পরিষ্কারভাবে এটি করতে পারে তবে আমি এটিতে একীভূত হয়ে যাব।" github.com/laravel/framework/issues/895#issuecomment-42709756
রায়ান

3
@ মুসা আপাতদৃষ্টিতে আপনি একটি কলামটি বাতিল করতে পারবেন (প্রাক্তন $table->string('colmn', 255)->nullable()->change();:) তবে বিপরীতে কাজ করতে দেখা যায় না ( $table->string('colmn', 255)->change();), সুতরাং আপনার এখনও এটির জন্য কাঁচা ডিবি অনুসন্ধানগুলি ব্যবহার করতে হবে
লুস ক্রুজ

5
নীচে @ ম্যাটম্যাকডোনাল্ডের উত্তর দেখুন। আপনি এটিকে স্থানান্তরিত করে তুলনামূলকভাবে নমনীয় করে তুলতে একে nlalable () ব্যবহার করতে পারেন ul
আজান

5
nullable(false)
লারাভেল

38

লারাভেল ৫ হিসাবে, এটিকে স্থানীয়ভাবে বিপরীত করা সম্ভব - কেবল অযোগ্য হিসাবে যুক্তি হিসাবে মিথ্যা পাস ()।

যেমন

$table -> string('foo') -> nullable(false) -> change();

এটি কাজ করে! সুতরাং লারাভেলের আপডেটের কারণে এটি সঠিক উত্তর হয়ে উঠেছে।
jlbang

ধন্যবাদ, যদিও আমি বুঝতে পারি না যে কলামগুলি ডিফল্টরূপে অ-অযোগ্য হয় না। এটি সাধারণত সেরা অনুশীলন এবং এটি কোডে প্রচুর শব্দ যোগ করে।
মরগান

1
কলামগুলি ডিফল্টরূপে নন-নাল। পোস্টারটি কেবল জিজ্ঞাসা করছিল যে কীভাবে ইতিমধ্যে নাল কলামটি বিপরীত করা যায়।
ম্যাট ম্যাকডোনাল্ড

2

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

composer require doctrine/dbal

তারপরে একটি মাইগ্রেশন তৈরি করুন যা টেবিলটি এর মতো বদলে দেবে:

php artisan make:migration fix_whatever_table_name_here

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

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

4
রোলব্যাক রুটিনে পুরো কলামটি ফেলে দেওয়ার কোনও কারণ আছে? ডাউন () পদ্ধতির পিছনে এবং সামনে রোলিং মাইগ্রেশনগুলিকে সমর্থন করার জন্য আপ () পদ্ধতির যুক্তিটি কেবল পূর্বাবস্থায় ফেলা উচিত।
অ্যান্ড্রু

1

আপনি কেবল -> অযোগ্য () ছাড়াই কলামটি আবার ঘোষণা করতে পারেন এবং -> পরিবর্তন ব্যবহার করতে পারেন

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->change();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->type('column')->nullable()->change();
    });
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.