2014-10-25 2 views
5

Vielleicht mache ich Dinge falsch, aber ich komme aus der Welt von PDO und ich bin es gewohnt, Argumente an eine Klasse übergeben zu können, in die eine Zeile instanziiert wird und dann Dieser Konstruktor wird ein Feld dynamisch für mich festlegen. Wie wird das mit Eloquent erreicht?Ein Attribut an Eloquent Modellkonstruktor übergeben

// Old way 

$dm = new DataModel('value'); 

DataModel.php

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

ich gelesen habe, dass Eloquent Sie mit einer ::create() Methode bietet, aber ich will nicht in diesem Stadium den Datensatz speichern.

Das Problem hier ist, dass Eloquent seinen eigenen Konstruktor hat und ich bin nicht sicher, ob mein Modell diesen Konstruktor vollständig überschreiben kann.

Antwort

9

können Sie zu Ihrem Modell hinzufügen:

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

    parent::__construct($attributes); 
} 

dies tun, was Sie wollen und starten Mutter Konstruktor.

+0

Vielen Dank, ausgearbeitet ziemlich gut! – silkfire

4

Ich glaube, Sie suchen eine Sache Laravel Massenzuordnung ruft

Sie einfach eine Reihe von befüllbaren Eigenschaften definieren, die Sie dann in der Lage sind in passieren, wenn ein neues Objekt erstellt. Keine Notwendigkeit, den Konstruktor zu überschreiben!

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

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

Weitere Informationen im Format official docs

+0

meine Eigenschaft existiert nicht als Spalte in der Tabelle, deshalb. in C# Ich denke, es würde eine "virtuelle" Eigenschaft genannt werden – silkfire

+0

Äquivalent [Laravel 5 Link] (https://laravel.com/docs/5.5/eloquent#mass-assignment) – Dan

0

alt Konstruktor einen Blick:

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

     $this->value = $value; 

    } 

neues Format:

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

    $this->value = $value; 
}