Besoin d'aide ?

CheckBox Array et Cast

Avatar de InsaneBobby
InsaneBobby

Hello,

Actuellement sur le developpement d'une petite appli sous laravel. Je suis confronté à un petit problème pour lequel je n'ai pas trouvé la solution.

J'ai un formulaire avec de checkbox pour les jours de la semaine

<input type="checkbox" name="live_days[]" value="lun" {{ in_array('lun', $member->live_days) ? 'checked' : '' }}>

<input type="checkbox" name="live_days[]" value="mar" {{ in_array('mar', $member->live_days) ? 'checked' : '' }}>

<input type="checkbox" name="live_days[]" value="mer" {{ in_array('mer', $member->live_days) ? 'checked' : '' }}>

Dans mon model j'utilise le cast pour sauvegarder le tableau dans un seul champ en BDD

protected $casts = [ 'live_days' => 'array' ];

Si je mets mon champ en BBD a null par défaut, j'ai cette erreur => in_array() expects parameter 2 to be array

En entrant, manuellement des données en base cela fonctionne. Mais dans le cas ou aucune case n'est cochée. L'update ne fonctionne pas

J'ai essayé de traiter ce probleme avec les mutator et accesor de Laravel sans succès. Existe t'il une meilleure solution pour résoudre ce problème ?

Merci pour votre aide

Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

La methode in_array prends un array en deuxième parametre, or, ton $member->live_days semble ne pas être un array (donc ça ne peut pas être ni un string, ni un objet, et ça ne peux pas être un null non plus).

Posté il y a 2 mois
Avatar de InsaneBobby
InsaneBobby

Salut,

Non effectivement quand le champ est vide çà me retourne "null'. Alors que pourtant le protected $casts le defini bien comme un array.

Cela voudrait dire qu'il faut que je passe par un Accessor dans ce genre ?

 public function getLiveDaysAttribute($value)
    {
        if(is_null($value)){

            return array();
        }
        else {

        return $value;

        }

    }
Posté il y a 2 mois
Avatar de CinquièmeDimension
CinquièmeDimension

Tu peux faire une vérif dans ton contoler genre:

if( $member->live_days == null ){
    $member->live_days = [];
}

A voir aussi sous quel format c'est stocké, en PHP ou, mieux, en JSON.

Posté il y a 2 mois
Avatar de InsaneBobby
InsaneBobby

Effectivement ce systeme fonctionne nickel. Top merci !!!

Posté il y a 2 mois

Vous ne pouvez pas répondre à ce sujet.