Comment définir la valeur par défaut d'un attribut sur un modèle Laravel ?
Dois-je définir la valeur par défaut lors de la création d'une migration ou dois-je la définir dans la classe du modèle ?
Comment définir la valeur par défaut d'un attribut sur un modèle Laravel ?
Dois-je définir la valeur par défaut lors de la création d'une migration ou dois-je la définir dans la classe du modèle ?
Vous pouvez également définir l'attribut Default dans Model>.
protected $attributes = [
'status' => self::STATUS_UNCONFIRMED,
'role_id' => self::ROLE_PUBLISHER,
];
Vous pouvez trouver les détails dans ces liens
1.) Comment définir une valeur d'attribut par défaut pour un modèle Laravel / Eloquent ?
Vous pouvez également utiliser Accesseurs et mutateurs pour cela Vous pouvez trouver les détails dans la documentation de Laravel 1.) https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
2.) https://scotch.io/tutorials/automatically-format-laravel-database-fields-with-accessors-and-mutators
Merci, la définition de l'attribut par défaut fonctionne bien en tant que protected $attributes = [ 'status' => self::STATUS_UNCONFIRMED, 'role_id' => self::ROLE_PUBLISHER, ] ; mais en tant que Mutators cela ne fonctionne pas, par exemple public function setUserTypeAttribute($value){ $this->attributes['user_type'] = 'User' ; } je veux savoir s'il y a une différence entre ces approches, ou laquelle est la meilleure.
Les deux sont meilleurs. C'est à vous de voir. Dans le mutateur, je vous ai donné un exemple où vous pouvez définir une valeur par défaut dans le cas de empty or custom
condition faite.comme public function setUserTypeAttribute($value){ $this->attributes['user_type'] = empty($value) ? 'User' : $value; }
J'espère que vous avez compris ce que je veux dire avec cet exemple.
Les autres réponses ne fonctionnent pas pour moi - elles sont peut-être dépassées. Voici la solution que j'ai utilisée pour définir automatiquement un attribut :
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
// auto-sets values on creation
static::creating(function ($query) {
$query->is_voicemail = $query->is_voicemail ?? true;
});
}
Je dois également préciser que j'essaie d'utiliser les valeurs par défaut dans les migrations. L'exemple ci-dessus provient d'un modèle Voicemail qui étend un modèle Recording, ils utilisent donc la même table. Lorsqu'un nouveau modèle Voicemail est créé, is_voicemail est défini sur true.
J'avais juste besoin de définir une valeur si elle est nulle à la création, donc cela a bien fonctionné pour moi.
Vous devez définir des valeurs par défaut dans migrations :
$table->tinyInteger('role')->default(1);
Par exemple, lorsque vous utilisez des modèles pour la validation de formulaires, vous souhaitez disposer d'une valeur par défaut avant de l'enregistrer dans la base de données. En utilisant votre exemple, vous devez ajouter l'enregistrement à la base de données avant de pouvoir récupérer la valeur par défaut, ce qui est fastidieux.
Sans oublier que un peu de les types de colonnes n'autorisent pas les valeurs par défaut (comme le texte)
Beaucoup de débutants vont sur Google, trouvent cette question et upvotent la réponse de Manish (et downvotent la mienne), mais je continue à croire que la réponse de Manish est la plus efficace. meilleure pratique est de le faire dans la classe de migration quand c'est possible . De plus, je ne vois pas de cas où vous validez un formulaire et où vous devez créer une nouvelle ligne puis obtenir une valeur par défaut de la base de données comme Innovaat l'a décrit précédemment. Obtenir toute sorte de valeur par défaut pendant la validation d'un formulaire me semble réinventer la roue.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
stackoverflow.com/questions/18747500/