8
votes

Validation: Comment définir un champ non requis pour "NULL" lorsque l'entrée est vide

J'ai une règle de validation qui ressemble à ceci: xxx

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.

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.

Quelle est la meilleure solution?


0 commentaires

4 Réponses :


1
votes

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


0 commentaires

9
votes

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;
            }
        }
    }
}


1 commentaires

Il est utile de dire que la valeur par défaut de la colonne doit être null dans la structure de la base de données;) Sinon, vous verrez toujours une valeur vide et non vraiment null .



8
votes

Dans ce cas, j'aime utiliser des mutateurs:

public function setTargetAttribute($target){

  $this->attributes['target'] = $target ?: null;

}


1 commentaires

Option la plus propre si vous me demandez



0
votes

Ma solution était ceci (laravel 5.2):

// modèle.php xxx

// votre modèle personnalisé qui étend le modèle.php < Pré> XXX

Faites attention à la nommage de votre setter (mutateur) exactement comme ci-dessus, la masse-maque et la magie se produiront.


0 commentaires