Autour de Laravel

Attention au passage d'un modèle vide aux vues

Avatar de KYoann
KYoann

Bonjour à tous,

Je viens de faire une petite observation; J'ai pour habitude d'envoyer depuis mes controlleurs la variable sensé contenir la collections du modèle a traiter, pour éviter de devoir vérifier l'existance de la variable coté vue, j'envoi une variable contenant un nouveau model.

if( $etage->layer_id != null ){
            $zonesinteractives = Zonesinteractive::where( 'layer_id' , $etage->layer->id )->get();

        } else {

            $etage->layer = new Layer();
            $zonesinteractives = new Zonesinteractive();
        }
        
        return view( 'mavue' ,compact( 'zonesinteractives '));

Ce que je viens de remarqué, c'est que coté vue ca coince lorsqu'on fait des parcours, que ce soit des foreach ou forelse

@forelse( $zonesinteractive )
    {{ $zonesinteractive->id }}
@empty
@endforelse

Pourquoi, et bien si on test en faisant un petit

{{ dd( $zonesinteractive->count() )

on va obtenir le nombre total d'enregistrement pour ce model, alors que nous avons fait un $zonesinteractive = New Zonesinteractive. Donc forcement, même si on utilise un forelse, il va rentré dans la boucle, mais planté car il ne va pas savoir faire $zonesinteractive->id

La ou c'est tordu, si on demande

{{ dd( $zonesinteractive->first() )

Nous allons bien récupérer le premier enregistrement.

Voilà pour ma petite observation, vous me direz surrement à raison qu'il y'a une raison à cela, mais je crée ce post, qui vous permettra peut être de ne pas predre une heure comme moi à comprendre pourquoi le code s'éfforcer a rentrer dans ma boucle de parcour.

Posté il y a 1 mois
Avatar de nash
nash

salut,

Merci pour ton retour : Mais un new Model creer une instance de ton model et un model->count() fera forcement un comptage de lignes de ton model et un first() la premiere ligne.

De plus dans l'exemple que tu fournis il y à un problème :

$zonesinteractives = Zonesinteractive::where( 'layer_id' , $etage->layer->id )->get();

Retourne soit une collection, soit null or empty donc au pire $zonesinteractives existe et est null ce qui mettra dans les choux le foreach

Mais il y a une erreur:

$zonesinteractives = new Zonesinteractive();

Obligatoirement $zonesinteractives est instanceOf Zonesinteractive et cela pertube ta logique dans la vue. Perso un new Model sera vraiment utile dans ta vue lorsque tu remplis des formulaires avec test de de valeurs dans le genre $model->attribute??null

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.