Laravel 5

Valeurs par défaut.

Avatar de Pandora
Pandora

Bonjour à tous,

J'ai une table de ma base de données avec un champ :

$table->integer('champ1')->default(0);

Dans mon model j'ai mis

protected $attributes = [
        'champ1' => 0,
 ]

Dans mon controller j'ai un basique

$table = Table::create($request->all());

J'aimerai que lorsque le champ de mon formulaire est vide, laravel entre directement dans la base la valeur par défaut de la base (ou du model), mais il passe en paramètre null ce qui forcément génère une erreur au niveau de la base.

Y a t-il un moyen autre que d'utiliser un mutator dans le model qui vérifie si null et change tout en ajoutant la clause nullable dans la base ? Ou bien autre chose que de devoir ne pas utiliser le $requets->all dans le controler et tout écrire individuellement ?

Merci d'avance

Avatar de Dom
Dom

La ligne de ta migration devrait suffire

Avatar de Dom
Dom

Tu l'as rajouter dans ton tableau $fillable ?

Avatar de Pandora
Pandora

C'est bien rajouté dans le fillable, et la ligne de la migration ne fonctionne pas puisque comme le champ existe en html laravel renvoie NULL comme valeur. La base de données refuse et ne met pas le default à la place. (PostgreSQL)

Avatar de bokino17
bokino17

Ajoute cette function dans la model

protected $fillable = ['champ1'];

Database migation

$table->integer('champ1')->default(0)->nullable();
Avatar de Pandora
Pandora

Hello,

J'ai déjà le fillable dans le model, et si je rajoute nullable dans la migration, il ne me met pas plus la valeur par défaut dans la table, il la rempli à null ...

Voici les "vrais" cc du code si ca peut aider, le problème étant sur les champs nb_enfants_*.

Quand on entre des valeurs tout fonctionne parfaitement.

Avec la version nullable() dans la migration il m'insère null dans la base de données, et sans il me fait une erreur SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "nb_enfants_1" violates not-null constraint

Schema::create('patients', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('numero_identification', 50)->unique();
            $table->string('internal_code', 50)->default(DB::raw('generate_code()'));       
            $table->integer('id_genre');
            $table->foreign('id_genre')->references('id')->on('liste_genres');  
            $table->integer('id_nationalite');
            $table->foreign('id_nationalite')->references('id')->on('list_countries');
            $table->integer('id_pays_residence');
            $table->foreign('id_pays_residence')->references('id')->on('list_countries');
            $table->integer('nb_enfants_1')->default(0)->nullable();
            $table->integer('nb_enfants_1_4')->default(0)->nullable();
            $table->integer('nb_enfants_5_14')->default(0)->nullable();
            $table->integer('nb_enfants_14')->default(0)->nullable();
            $table->integer('id_niveau_education');
            $table->foreign('id_niveau_education')->references('id')->on('liste_niveau_educations');  
            $table->integer('id_user_create');
            $table->foreign('id_user_create')->references('id')->on('users');
            $table->timestamps();
        });
class Patient extends Model
{
    protected $fillable = [
        'id_user_create','numero_identification','id_genre','id_nationalite', 'id_pays_residence',
        'nb_enfants_1','nb_enfants_1_4','nb_enfants_5_14','nb_enfants_14','id_niveau_education',
        
    ];

    protected $attributes = [
        'nb_enfants_1' => 0,
        'nb_enfants_1_4' => 0,
        'nb_enfants_5_14' => 0,
        'nb_enfants_14' => 0,
    ];
public function store(PatientRequest $request)
    {
        //
        
        //dump($request);
        
        $patient = Patient::create($request->all());

        return redirect()->route('patient.show', $patient)->with('ok',__('Le patient a bien été enregistré'));
    }
<div class="form-row">
            <div class="col-sm-4">@lang('Nombe d\'enfants') :</div>
            <div class="col-sm-1"><input type="text" size="2" placeholder="0" name="nb_enfants_1" id="nb_enfants_1"/></div> 
            <div class="col-sm-1"> <label for="nb_enfants_1">(<1 an)</label></div>
            <div class="col-sm-1"><input type="text" size="2" placeholder="0" name="nb_enfants_1_4" id="nb_enfants_1_4"/></div> 
            <div class="col-sm-1"> <label for="nb_enfants_1_4">(1-4 ans)</label></div>
            <div class="col-sm-1"><input type="text" size="2" placeholder="0" name="nb_enfants_5_14" id="nb_enfants_5_14"/></div> 
            <div class="col-sm-1"> <label for="nb_enfants_5_14">(5-14 ans)</label></div>
            <div class="col-sm-1"><input type="text" size="2" placeholder="0" name="nb_enfants_14" id="nb_enfants_14"/></div> 
            <div class="col-sm-1"> <label for="nb_enfants_14">(>14 ans)</label></div>
        </div>
Avatar de bestmomo
bestmomo

Salut,

En gros tu veux vérifier et changer la valeur avant mise à jour avec Eloquent, dans ce cas il faut utiliser un mutator.

Avatar de Pandora
Pandora

Oui c'est la question de base, est ce que ca peut se faire plus simplement qu'avec un mutator, mais apaprement non.

Vous ne pouvez pas répondre à ce sujet.