एक लारवल प्रवास में स्तंभ को अशक्त न करें


126

मैं अभी एक तालिका में कुछ कॉलम बनाने के लिए माइग्रेशन लिख रहा हूं nullable। डाउन फंक्शन के लिए, मैं निश्चित रूप से उन कॉलमों को not nullableफिर से बनाना चाहता हूं । मैंने स्कीमा बिल्डर डॉक्स के माध्यम से देखा , लेकिन ऐसा करने का तरीका नहीं देख सका।

किसी भी सहायता की सराहना की जाएगी।


इस सवाल का सबसे पूरा जवाब यहां पाया जा सकता है: stackoverflow.com/a/32568625/4908847
szaman

जवाबों:


228

Laravel 5 से पहले स्कीमा बिल्डर का उपयोग करके मौजूदा टेबल कॉलम को बदलने का कोई Laravel देशी तरीका नहीं था। इसके लिए आपको कच्चे प्रश्नों का उपयोग करना होगा।

हालांकि, लारवेल 5 के रूप में आप उपयोग कर सकते हैं:

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

1
यही मुझे भी मिला। कॉलम परिभाषाओं को बदलने की अनुमति देने के लिए स्कीमा बिल्डर के लिए एक अच्छा स्पर्श होगा, जिसे वह समर्थन नहीं करता है। मुझे यकीन है कि खुद की तरह कई अन्य लोग भी हैं जो स्कीमा बिल्डर का उपयोग करके मौजूदा डीबी को संशोधित कर रहे हैं, न कि केवल स्क्रैच से टेबल बना रहे हैं।
बीन

3
टेलर ओटवेल (लारवेल के निर्माता) ने 6 दिन पहले (2014-05-09) कहा: "मैं अभी भी अपने बयान से खड़ा हूं कि अगर कोई भी सफलतापूर्वक और सफाई से इसे कर सकता है तो मैं इसका विलय करूंगा।" github.com/laravel/framework/issues/895#issuecomment-42709756
रेयान

3
@Musa जाहिर तौर पर आप एक कॉलम को अशक्त (पूर्व:) सेट कर सकते हैं, $table->string('colmn', 255)->nullable()->change();लेकिन रिवर्स काम नहीं करता है ( $table->string('colmn', 255)->change();), इसलिए आपको अभी भी इसके लिए कच्चे db प्रश्नों का उपयोग करने की आवश्यकता है
Luís Cruz

5
नीचे @ MattMcDonald का उत्तर देखें। आप इसे अशक्त और अशक्त (झूठा) बनाने के लिए nullable () का उपयोग कर सकते हैं ताकि यह माइग्रेशन में nullable न हो सके।
अंजोन

5
nullable(false)मेरे लिए
लारावेल

38

लारवेल 5 के रूप में, इस मूल को उल्टा करना संभव है - बस अशक्त () के तर्क के रूप में गलत पास करें।

जैसे

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

यह काम करता हैं! इसलिए लारवेल के अपडेट के कारण यह सही उत्तर बन गया है।
21

धन्यवाद, हालांकि मुझे समझ नहीं आया कि कॉलम को डिफ़ॉल्ट रूप से गैर-अशक्त क्यों नहीं बनाया जाता है। यह आमतौर पर सबसे अच्छा अभ्यास है और यह कोड के लिए बहुत सारे शोर जोड़ता है।
मॉर्गन

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();
    });
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.