2014-10-25 12 views
5

पर एक विशेषता उत्तीर्ण करना शायद मैं कुछ गलत कर रहा हूं, लेकिन मैं पीडीओ की दुनिया से आ रहा हूं और मुझे कक्षा में तर्क पारित करने में सक्षम होने के लिए उपयोग किया जाता है कि एक पंक्ति को तुरंत चालू किया जाता है और फिर वह कन्स्ट्रक्टर मेरे लिए गतिशील रूप से एक फ़ील्ड सेट करेगा। यह eloquent के साथ कैसे प्राप्त किया जाता है?एलोक्वेंट मॉडल कन्स्ट्रक्टर

// Old way 

$dm = new DataModel('value'); 

DataModel.php

class DataModel() { 
    function __construct($value = null) { 
     $this->value = $value; 
    } 
} 

मैं पढ़ा है कि सुवक्ता एक ::create() विधि के साथ प्रदान करता है, लेकिन मैं इस स्तर पर रिकॉर्ड को बचाने के लिए नहीं करना चाहती।

यहां मुद्दा यह है कि इलोक्वेन्ट का अपना कन्स्ट्रक्टर है और मुझे यकीन नहीं है कि मेरा मॉडल पूरी तरह से उस कन्स्ट्रक्टर को ओवरराइड कर सकता है।

उत्तर

9

आप अपने मॉडल के लिए जोड़ सकते हैं:

public function __construct($value = null, array $attributes = array()) 
{ 
    $this->value = $value; 

    parent::__construct($attributes); 
} 

यह आप क्या चाहते हैं और क्या करेंगे शुभारंभ माता पिता निर्माता।

+0

आपको बहुत बहुत धन्यवाद, बहुत अच्छी तरह से बाहर काम किया! – silkfire

4

मेरा मानना ​​है कि आप एक बात Laravel कॉल जन असाइनमेंट

आप बस fillable गुण है जिसे आप जब एक नई वस्तु बनाने, में पारित करने में सक्षम हैं की एक सरणी को परिभाषित करने के लिए देख रहे हैं। कन्स्ट्रक्टर को ओवरराइड करने की कोई ज़रूरत नहीं है!

class DataModel extends Eloquent { 
    protected $fillable = array('value'); 
} 

$dataModel = new DataModel(array(
    'value' => 'test' 
)); 

अधिक जानकारी के लिए official docs

+0

मेरी संपत्ति तालिका में कॉलम के रूप में मौजूद नहीं है, यही कारण है कि। सी # में मुझे लगता है कि इसे 'वर्चुअल' प्रॉपर्टी – silkfire

+0

समतुल्य [लैरवेल 5 लिंक] (https://laravel.com/docs/5.5/eloquent#mass-assignment) कहा जाएगा। – Dan

0

वर्ष निर्माता प्रारूप पर एक नज़र डालें:

protected $value; 
public function __construct($value = null) 
    { 

     $this->value = $value; 

    } 

नए प्रारूप:

protected $value;  
public function __construct(array $attributes = array(), $value =null) 
{ 
    /* override your model constructor */ 
    parent::__construct($attributes); 

    $this->value = $value; 
} 
संबंधित मुद्दे