J'ai une règle de validation qui ressemble à ceci: Ce n'est pas un champ obligatoire. Si une valeur n'est pas spécifiée dans l'entrée (c.-à-d. Entrée :: get ('cible') == ''), je veux que le champ soit réglé sur NULL dans la base de données. P> actuellement la règle ci-dessus passe et en l'absence d'une entrée numérique, il est défini sur 0 dans la base de données. P> Quelle est la meilleure solution? p> p>
4 Réponses :
Je ne pense pas que ce soit un problème de Laravel, vous devez ajouter Tag MySQL ... Modifier la table pour ajouter NULL comme valeur par défaut .. Actuellement, si vous passez la valeur vide, elle ajoutera 0 car par défaut, il n'est pas null et indique
ALTER TABLE `table` CHANGE `target` `target` INT( 11 ) NULL
Vous pouvez définir le champ comme null code> à Laravel simplement en attribuant une valeur
null code> à l'attribut de modèle approprié avant d'appeler
Enregistrer () code>.
class BaseModel extends Eloquent {
public static function boot()
{
parent::boot();
static::creating(function($model) {
static::setNullWhenEmpty($model);
return true;
});
}
private static function setNullWhenEmpty($model)
{
foreach ($model->toArray() as $name => $value) {
if (empty($value)) {
$model->{$name} = null;
}
}
}
}
Il est utile de dire que la valeur par défaut de la colonne doit être null code> dans la structure de la base de données;) Sinon, vous verrez toujours une valeur vide et non vraiment
null code>.
Dans ce cas, j'aime utiliser des mutateurs:
public function setTargetAttribute($target){ $this->attributes['target'] = $target ?: null; }
Option la plus propre si vous me demandez
Ma solution était ceci (laravel 5.2):
// modèle.php p> // votre modèle personnalisé qui étend le modèle.php p> < Pré> XXX PRE> Faites attention à la nommage de votre setter (mutateur) exactement comme ci-dessus, la masse-maque et la magie se produiront. P> P>