slam4:php:phalcon:models

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
slam4:php:phalcon:models [2015/01/17 01:30] – [4.2- Ajout/mise à jour] jcheronslam4:php:phalcon:models [2019/08/31 14:21] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 ====== Modèles ====== ====== Modèles ======
 Un modèle est une classe métier, représentant une partie des données d'une application. Dans la plupart des cas, un modèle est associé à une table de la base de données.\\ Un modèle est une classe métier, représentant une partie des données d'une application. Dans la plupart des cas, un modèle est associé à une table de la base de données.\\
-[[http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Model.html|Phalcon\Mvc\Model]] est la classe de base des models d'une application. Cette classe met à disposition des fonctionnalités CRUD, offre des possibilités de recherche avancées, et permet de gérer les relations entre models, le tout sans avoir besoin d'utiliser SQL.+[[https://api.phalconphp.com/class/Phalcon/Mvc/Model.html|Phalcon\Mvc\Model]] est la classe de base des models d'une application. Cette classe met à disposition des fonctionnalités CRUD, offre des possibilités de recherche avancées, et permet de gérer les relations entre models, le tout sans avoir besoin d'utiliser SQL
 + 
 +Phalcon implémente **ActiveRecord** pour sa partie ORM, il utilise donc l'héritage sur les Models, par opposition à certains ORM qui implémentent **[[http://en.wikipedia.org/wiki/Data_mapper_pattern|DataMapper]]** (Doctrine 2) et permettent de travailler avec des models plus indépendants de la couche technique liée à la persistance (POPO).
  
 ===== -- Création de models ===== ===== -- Création de models =====
Ligne 526: Ligne 528:
  
 <html><div class="note">Sans précaution, ce type d'affectation globale peut permettre d'affecter n'importe qu'elle valeur aux colonnes de la table concernée (). Il ne faut donc l'utiliser que si on autorise la modification de chaque colonne du modèle, y compris si les colonnes concernées ne sont pas présentes dans le formulaire validé.</div></html> <html><div class="note">Sans précaution, ce type d'affectation globale peut permettre d'affecter n'importe qu'elle valeur aux colonnes de la table concernée (). Il ne faut donc l'utiliser que si on autorise la modification de chaque colonne du modèle, y compris si les colonnes concernées ne sont pas présentes dans le formulaire validé.</div></html>
 +
 +Il est possible de préciser en second paramètre les colonnes (libelle et admin) à affecter :
 +
 +<sxh php>
 +$droit= new Droit();
 +$droit->save($_POST, array('libelle', 'admin'));
 +</sxh>
 +
 +Ou de faire clairement la distinction entre l'ajout (**create()**) et la mise à jour (**update()**) :
 +
 +<sxh php>
 +$droit       = new Droit();
 +$droit->setNom("Donner des droits");
 +$droit->setAdmin(1);
 +
 +//L'enregistrement doit être créé
 +if ($droit->create() == false) {
 +    echo "Impossible d'ajouter ce droit : \n";
 +    foreach ($droit->getMessages() as $message) {
 +        echo $message, "\n";
 +    }
 +} else {
 +    echo "Un nouveau droit a été créé !";
 +}
 +</sxh>
 +
 +Mise à jour d'un objet et de l'objet associé par un **belongsTo** :
 +<sxh php>
 +    public function addCategorieUserAction(){
 +    $categorie=new Categorie();
 +    $categorie->setNom("Auteurs");
 +
 +    $user=new Utilisateur();
 +    $user->setNom("SMITH");
 +    $user->setPrenom("ROBERT");
 +    $user->setAge(30);
 +    $user->setAdulte(1);
 +
 +    $user->categorie=$categorie;
 +    if($user->save()==false){
 +    echo "Problème d'enregistrement \n";
 +    foreach ($user->getMessages() as $message) {
 +    echo $message, "\n";
 +    }
 +    }else{
 +    echo "Catégorie  & utilisateur sauvegardés";
 +    }
 +    }
 +</sxh>
 +
 +
 +==== -- Suppression d'enregistrements ====
 +
 +La méthode **Phalcon\Mvc\Model::delete()** permet de supprimer un enregistrement :
 +<sxh php;title:Exemple de suppression>
 +<?php
 +
 +$user = Utilisateur::findFirst(11);
 +if ($user != false) {
 +    if ($user->delete() == false) {
 +        echo "Impossible de supprimer l'utilisateur : \n";
 +        foreach ($user->getMessages() as $message) {
 +            echo $message, "\n";
 +        }
 +    } else {
 +        echo "L'utilisateur a été supprimé";
 +    }
 +}
 +
 +</sxh>
 +
 +Il est également possible de supprimer plusieurs enregistrement en parcourant un résultat avec un foreach :
 +
 +<sxh php;title:Suppression dans parcours d'un curseur> 
 +<?php
 +
 +foreach (Utilisateur::find("ville='Caen'") as $user) {
 +    if ($user->delete() == false) {
 +        echo "Impossible de supprimer l'utilisateur : \n";
 +        foreach ($user->getMessages() as $message) {
 +            echo $message, "\n";
 +        }
 +    } else {
 +        echo "L'utilisateur a été supprimé";
 +    }
 +}
 +</sxh>
 +
 +===== -- Suppléments =====
 +
 +==== -- Events ====
 +Phalcon permet de gérer/contrôler la mise à jour des objets via des événements, contrôlable de préférence par mise en place d'un [[http://docs.phalconphp.com/en/latest/reference/models.html#events-and-events-manager|eventManager]]. 
 +==== -- Behaviors ====
 +
 +Phalcon met a disposition un ensemble d'outils permettant d'associer un comportement aux objets : voir [[http://docs.phalconphp.com/en/latest/reference/models.html#behaviors|behaviors]] :
 +  * timeStempable : pour mémoriser l'heure de mise à jour/ajout d'objets
 +  * softDelete : pour marquer des enregistrements comme supprimés
  • slam4/php/phalcon/models.1421454652.txt.gz
  • Dernière modification : il y a 6 ans
  • (modification externe)