Laravel 5

Valeurs par défaut.

  • Avatar de Pandora
    Membre depuis :
    20/03/2018
    Messages :
    11

    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
    Membre depuis :
    17/07/2017
    Messages :
    37

    La ligne de ta migration devrait suffire

  • Avatar de Dom
    Membre depuis :
    17/07/2017
    Messages :
    37

    Tu l'as rajouter dans ton tableau $fillable ?

  • Avatar de Pandora
    Membre depuis :
    20/03/2018
    Messages :
    11

    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
    Membre depuis :
    05/10/2018
    Messages :
    17

    Ajoute cette function dans la model

    protected $fillable = ['champ1'];

    Database migation

    $table->integer('champ1')->default(0)->nullable();
  • Avatar de Pandora
    Membre depuis :
    20/03/2018
    Messages :
    11

    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 nbenfants*.

    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
    Membre depuis :
    07/04/2013
    Messages :
    2576

    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
    Membre depuis :
    20/03/2018
    Messages :
    11

    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.