Wenn ich versuche, eine Eigenschaft zu deklarieren, wie folgt:
public $quantity = 9;
... es funktioniert nicht, weil es nicht als "Attribut" betrachtet wird, sondern lediglich als eine Eigenschaft der Modellklasse. Nicht nur das, ich blockiere auch den Zugriff auf das tatsächlich vorhandene und vorhandene Attribut "Quantität".
Was sollte ich dann tun?
Das mache ich jetzt:
protected $defaults = array(
'quantity' => 9,
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes($this->defaults, true);
parent::__construct($attributes);
}
Ich werde dies als PR vorschlagen, so dass wir diesen Konstruktor nicht bei jedem Model deklarieren müssen und einfach anwenden können, indem Sie einfach das $defaults
-Array in unseren Models deklarieren ...
UPDATE:
Wie aus cmfolio hervorgeht, ist die eigentliche ANTWORT ziemlich einfach:
Überschreiben Sie einfach die $attributes
-Eigenschaft! So was:
protected $attributes = array(
'quantity' => 9,
);
Das Problem wurde hier diskutiert.
Ein Update dazu ...
@ j-bruni hat einen Vorschlag eingereicht, und Laravel 4.0.x unterstützt jetzt die Verwendung folgender Optionen:
protected $attributes = array(
'subject' => 'A Post'
);
Dadurch wird Ihr Attribut subject
beim Konstruieren automatisch auf A Post
gesetzt. Sie müssen den benutzerdefinierten Konstruktor nicht verwenden, den er in seiner Antwort erwähnt hat.
Wenn Sie jedoch am Ende den Konstruktor wie er verwenden (was ich tun musste, um Carbon::now()
zu verwenden), müssen Sie darauf achten, dass $this->setRawAttributes()
das überschreibt, was Sie mit dem $attributes
-Array oben eingestellt haben. Zum Beispiel:
protected $attributes = array(
'subject' => 'A Post'
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes(array(
'end_date' => Carbon::now()->addDays(10)
), true);
parent::__construct($attributes);
}
// Values after calling `new ModelName`
$model->subject; // null
$model->end_date; // Carbon date object
// To fix, be sure to `array_merge` previous values
public function __construct(array $attributes = array())
{
$this->setRawAttributes(array_merge($this->attributes, array(
'end_date' => Carbon::now()->addDays(10)
)), true);
parent::__construct($attributes);
}
Weitere Informationen finden Sie im Github-Thread .
Ich weiß, das ist wirklich alt, aber ich hatte gerade dieses Problem und konnte dieses Problem mit dieser Site lösen.
Fügen Sie diesen Code Ihrem Modell hinzu
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->user_id = auth()->id();
});
}
Update/Haftungsausschluss
Dieser Code funktioniert, überschreibt jedoch das reguläre Eloquent-Modell creating
-Ereignis