2016-09-02 6 views
14

मैं लैरवेल और एलोक्वेंट का उपयोग दो साल से कर रहा हूं और आज मैंने एक नया लैरवेल 5.3 स्थापित करने का फैसला किया है और इसके साथ कुछ करने का प्रयास किया है।लैरवेल 5.3 मॉडल बनाना रिटर्न "फ़ील्ड का डिफ़ॉल्ट मान नहीं है"

मैंने अपनी पुरानी डेटाबेस स्कीमा का उपयोग किया और मेरे मॉडल, परिभाषित भरे कॉलम बनाए। यह वही मेरी Page मॉडल लग रहा है की तरह है:

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class Page extends Model 
{ 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'language', 
     'title', 
     'slug', 
     'url', 
     'description', 
     'tags', 
     'wireframe', 
     'order', 
     'is_active' 
    ]; 

    public function menus() 
    { 
     return $this->belongsToMany(Menu::class); 
    } 
} 

url विशेषता MySQL पर एक TEXT प्रकार स्तंभ है, इसलिए अगर मैं मॉडल बनाते समय यह करने के लिए किसी भी मूल्य में उत्तीर्ण नहीं होते, यह एक खाली स्ट्रिंग होना चाहिए। इसके बजाय, मुझे SQLSTATE[HY000]: General error: 1364 Field 'url' doesn't have a default value त्रुटि मिल रही है।

Page::create([ 
    'title' => $root_menu['title'], 
    'slug' => $root_menu['slug'], 
    'language' => $this->language, 
    'wireframe' => key(config('cms.wireframe')), 
    'order' => 0 
]); 

यह एक Laravel 5.3 संबंधित समस्या है या मैं कुछ याद आ रही है:

यहाँ एक पोस्ट मॉडल बनाने के लिए मेरे प्रयास है? आपकी मदद के लिए अग्रिम धन्यवाद।

उत्तर

40

त्रुटि के कारण @ निकलास द्वारा समझाया गया है।

कारण यह हो रहा है, हालांकि, यह है कि लैरवेल 5.3 डिफ़ॉल्ट रूप से MySQL के लिए strict मोड का उपयोग करता है।

यदि आप पिछले व्यवहार पर वापस जाना चाहते हैं, तो अपने config/database.php फ़ाइल को अपडेट करें और अपने कनेक्शन के लिए 'strict' => false सेट करें।

+1

उस स्नीकी बेटे के ... – swt83

9

आप किसी ऑब्जेक्ट को 'URL' विशेषता के साथ किसी तालिका में डालने का प्रयास कर रहे हैं जिसमें डिफ़ॉल्ट मान के बिना 'URL' कॉलम है। तो डेटाबेस नहीं जानता कि उस कॉलम के साथ क्या करना है।

आप तीन चीजों में से एक कर सकते हैं।

  1. URL मान में बनाने
  2. बदलें में अपने स्कीमा भरें कोई डिफ़ॉल्ट मान शामिल करने के लिए यूआरएल
  3. बदलें यूआरएल स्कीमा पर अशक्त प्रविष्टि अनुमति देने के लिए। (खाली स्ट्रिंग)

यदि आपको और सहायता की आवश्यकता है, तो अपने माइग्रेशन या स्कीमा पोस्ट करें।

+0

गैर शून्य फ़ील्ड में शून्य मान डालने का प्रयास करने पर mysql वापसी त्रुटि नहीं होनी चाहिए? – Sherif

+1

हां? इस मामले में, वह मैदान में कुछ भी नहीं डाल रहा है, यहां तक ​​कि एक शून्य मूल्य भी नहीं। –

+0

मेरी स्थिति में, मुझे खाली कॉलम मिला है। जब मैंने इसे डिफ़ॉल्ट रूप से शून्य() बनाया, तो सब कुछ ठीक काम करना शुरू कर दिया। –

संबंधित मुद्दे