Si j'essaie de déclarer une propriété, comme ceci:
public $quantity = 9;
... cela ne fonctionne pas, car il n'est pas considéré comme un "attribut", mais simplement une propriété de la classe de modèle. Non seulement cela, mais je bloque également l'accès à l'attribut "quantité" réellement réel et existant.
Que dois-je faire alors?
C'est ce que je fais maintenant:
protected $defaults = array(
'quantity' => 9,
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes($this->defaults, true);
parent::__construct($attributes);
}
Je suggérerai ceci en tant que PR afin que nous n'ayons pas besoin de déclarer ce constructeur à chaque modèle et que nous puissions facilement l'appliquer en déclarant simplement le tableau $defaults
dans nos modèles ...
METTRE À JOUR:
Comme indiqué par cmfolio, la REPONSE actuelle est assez simple:
Remplacez simplement la propriété $attributes
! Comme ça:
protected $attributes = array(
'quantity' => 9,
);
La question a été discutée ici .
Une mise à jour de cette ...
@ j-bruni a soumis une proposition et Laravel 4.0.x prend désormais en charge les éléments suivants:
protected $attributes = array(
'subject' => 'A Post'
);
Ce qui définira automatiquement votre attribut subject
à A Post
lors de la construction. Vous n'avez pas besoin d'utiliser le constructeur personnalisé qu'il a mentionné dans sa réponse.
Cependant, si vous finissez par utiliser le constructeur comme il l'a fait (ce que je devais faire pour utiliser Carbon::now()
), veillez à ce que $this->setRawAttributes()
écrase tout ce que vous avez défini à l'aide du tableau $attributes
ci-dessus. Par exemple:
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);
}
Voir le fil de discussion Github pour plus d'informations.
Je sais que c'est vraiment vieux, mais je viens d'avoir ce problème et j'ai pu le résoudre en utilisant ce site .
Ajouter ce code à votre modèle
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->user_id = auth()->id();
});
}
Mise à jour/Déni de responsabilité
Ce code fonctionne, mais il remplacera l'événement Eloquent Model creating
classique.