Je fais le TP sur Laravel, au niveau des vues Blade, pour la création et l'édition on utilise la même vue.
Pour savoir si on est en création ou édition on utilise la propriété exists sur notre model. Exemple sur le titre de la page:

@section('title', $property->exists ? "Editer un bien":"Créer un bien")

J'ai installé la debugbar pour inspecter les requêtes, je vois qu'il ne fait pas de requête en base de donnée pour la création. En regardant le code du Illuminate\Database\Eloquent\Model, je vois qu'il y a une proprité $exists qui est à false par defaut:

    /**
     * Indicates if the model exists.
     *
     * @var bool
     */
    public $exists = false;

Ce qui veux dire que dans mon contoller à la méthode create() quand je fais:

$obj =  new MyModel();

Cette propritée (exists) reste à false. Par contre quand je veux mettre à jour une donnée, il y a forcément un requêtte qui est faite pour afficher l'enregistrement, par exemple:

select * from "properties" where "id" = '2' limit 1

Et c'est, à ce moment là que Laravel quelque part passe cette propritée (exists) à true?

J'ai essayé de trouver plus d'infos dans la doc, mais je n'ai pas réussie, on me parle de whereExists et de upsert. j'essaie de comprendre en détail ce que fais le framework, cela à peut être était expliqué mais je ne parviens pas à retrouver l'info.

1 réponse


Bonjour,
Comment j'ai compris moi cette partie, c'est que l'attribut exists est en rapport avec l'existance du modèle dans la base de données. S'il y a un retour depuis la base de données, exists se met à "true".