2015-05-28 15 views
5

पर एक __construct मेरे पास एक कस्टम सेटर है जो मैं अपने मॉडल पर __construct विधि में चल रहा हूं।एलोक्वेन्ट लैरवेल मॉडल

यह वह संपत्ति है जिसे मैं सेट करना चाहता हूं।

protected $directory; 

मेरे निर्माता

public function __construct() 
    { 
     $this->directory = $this->setDirectory(); 
    } 

सेटर:

public function setDirectory() 
    { 
     if(!is_null($this->student_id)){ 
      return $this->student_id; 
     }else{ 
      return 'applicant_' . $this->applicant_id; 
     } 
    } 

मेरे समस्या यह है कि मेरी सेटर के अंदर, $this->student_id (जो मॉडल की एक विशेषता है डेटाबेस से खींचा जा रहा है) null लौट रहा है। जब मैं अपने सेटर के अंदर से dd($this), मुझे लगता है कि मेरा #attributes:[] एक खाली सरणी है।
तो, __construct() के बाद तक मॉडल के गुण सेट नहीं किए जाते हैं। मैं अपनी निर्माण विधि में अपना $directory विशेषता कैसे सेट कर सकता हूं?

public function __construct(array $attributes = array()) 
{ 
    parent::__construct($attributes); 

    $this->directory = $this->setDirectory(); 
} 

पहली पंक्ति (parent::__construct()) अपने कोड चलाता है से पहले सुवक्ता Model की खुद की निर्माण विधि चलेंगे, जो आप के लिए सभी विशेषताओं स्थापित करेगा:

उत्तर

19

आप करने के लिए अपने निर्माता को बदलने की जरूरत। इसके अलावा कन्स्ट्रक्टर के विधि हस्ताक्षर में परिवर्तन लैरवेल की अपेक्षाओं का समर्थन जारी रखना है: $model = new Post(['id' => 5, 'title' => 'My Post']);

अंगूठे का नियम वास्तव में याद रखना है, कक्षा को विस्तारित करते समय, यह जांचने के लिए कि आप मौजूदा विधि को ओवरराइड नहीं कर रहे हैं कि यह अब नहीं चलता है (यह जादू __construct, __get, आदि विधियों के साथ विशेष रूप से महत्वपूर्ण है)। आप यह देखने के लिए मूल फ़ाइल के स्रोत की जांच कर सकते हैं कि इसमें आपके द्वारा परिभाषित विधि शामिल है या नहीं।

+0

वही है जो मुझे चाहिए !! धन्यवाद –

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