2016-05-24 17 views
5

यहाँ स्थिति है प्रदर्शित नहीं करता है:Laravel 5.2 सुवक्ता बनाने() विधि विदेशी महत्वपूर्ण अपवाद से पता चलता है, लेकिन बचाने के() किसी भी त्रुटि

मैं दो तालिकाओं उपयोगकर्ताओं और परियोजनाओं की है। उपयोगकर्ता तालिका में प्रोजेक्ट टेबल के साथ कई संबंध हैं। जब मैं Model::create() विधि का उपयोग कर प्रोजेक्ट टेबल में डेटा डालने का प्रयास करता हूं, तो यह विदेशी कुंजी बाधा त्रुटि दिखाता है। लेकिन जब मैं प्रोजेक्ट मॉडल का एक उदाहरण बनाता हूं और विशेषता सेट करता हूं और $modelObject->save() विधि का उपयोग करता हूं तो यह काम करता है। (: PostStart() फंक्शन) -

public function postStart(Request $request) 
{ 
    $input = $request->input(); 

    $project = Project::create(array(
     'title' => $input['title'], 
     'main_category_id' => $input['category'], 
     'user_id' => Auth::id(), 
     'slug' => Helper::slug($input['title']), 
    )); 

    $project['slug'] = Helper::slug($input['title'], $project->id); 
    $project->save(); 

    return redirect('project/'.$project->slug.'/edit'); 
} 

Project.php (मॉडल)

class Project extends Model 
{ 
    protected $fillable = ['user_id', 'main_category_id', 'sub_category_id', 'title', 'slug', 'description', 'project_location', 'project_url', 'project_image', 'type', 'min_bid_amount']; 

    public static $updatable = ['user_id' => "", 'main_category_id' => "", 'sub_category_id' => "", 'title' => "", 'slug' => "", 'description' => "", 'project_location' => "", 'project_url' => "", 'project_image' => "", 'type' => "", 'min_bid_amount' => ""]; 

    public function user() { 
     return $this->belongsTo('User'); 
    } 
} 

और यहाँ है नीचे कोड

ProjectsController.php (नियंत्रक) है त्रुटि

Connection.php लाइन 673 में क्वेरी अपवाद: SQLSTATE [23000]: ईमानदारी बाधा उल्लंघन: 1452 बच्चे पंक्ति को जोड़ या अपडेट नहीं कर सकता: एक विदेशी कुंजी बाधा विफल हो जाती है (kickstarterprojects, बाधा projects_user_id_foreign विदेशी कुँजी (user_id) संदर्भ users (id)): मूल्यों (एसक्यूएल projects (updated_at, created_at में डालने) (2016/05/24 13:00:27, 2016/05/24 13:00:27))

लेकिन जब मैं $modelObject->save() विधि का उपयोग करता हूं तो यह काम करता है। मुझे समझ में नहीं आता कि समस्या क्या है। अगर मुझे समाधान मिला तो यह बहुत उपयोगी होगा।

उत्तर

5

क्या आप वाकई सभी आवश्यक जानकारी प्रदान करते हैं? आप create() समारोह की जाँच करेगा, तो आप देखेंगे:

public static function create(array $attributes = []) 
{ 
    $model = new static($attributes); 

    $model->save(); 

    return $model; 
} 

तो create विधि भी save विधि का उपयोग करें। आप अपने अपवाद से देख सकते हैं कि आप फ़ील्ड के लिए कोई मान निर्धारित नहीं करते हैं। नतीजतन - आपकी समस्या या तो $attributes या अपनी कक्षा में कन्स्ट्रक्टर में। क्योंकि $attributes लगता है कि मान हैं और फ़ील्ड भरने योग्य हैं - आपको कन्स्ट्रक्टर में आगे जाने की आवश्यकता है। इसके अलावा वहाँ संबंध

public function user() { 
    return $this->belongsTo('User', 'id'); 
} 

में एक त्रुटि विधि $this->belongsTo('User', 'user_id') या $this->belongsTo('User')

युपीडी लौट जाना है:

हम commetns से समझने के रूप में, निर्माता फिर से लागू किया गया था और परिणाम के रूप में - गुण असाइनमेंट काम नहीं करता है। इस समस्या को ठीक करने के लिए आपको केवल माता-पिता कन्स्ट्रक्टर विधि को कॉल करने और नए तर्क जोड़ने की आवश्यकता है, जो आपको चाहिए:

public function __construct(array $attributes = []) 
{ 
    parent::__construct($attributes); 
    // some additional code 
} 
+1

हैलो @ f0rtis, उत्तर के लिए धन्यवाद। मैंने संबंध को सही किया है लेकिन त्रुटि अभी भी बनी हुई है। यहां तक ​​कि मैं मॉडल क्लास ऑब्जेक्ट को मैन्युअल रूप से एट्रिब्यूट्स और $ modelObject-> save() का उपयोग करके डेटा को सहेजने में सक्षम हूं। मुझे समझ में नहीं आता कि मॉडल :: create() इस फ़ंक्शन में क्यों काम नहीं कर रहा है। लेकिन मैं अन्य कार्यों में मॉडल :: create() का उपयोग कर रहा हूं और यह ठीक काम कर रहा है। –

+2

@ जितेंद्रेंंगला जैसा मैंने कहा - क्या आप वाकई अपनी कक्षा के '__construct' को फिर से लागू नहीं करते हैं? या हो सकता है कि 'भरें' विधि या 'setAttribute'? शायद यह विस्तारित कक्षा – f0rtis

+1

हैलो @fortis में किया गया था, आपकी धारणा सही है। मैंने सार्वजनिक फ़ोल्डर में कुछ पथ आरंभ करने के लिए मॉडल क्लास में '__construct' का उपयोग किया है। क्या यह कुछ भी प्रभावित करता है? –

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