Projet

Général

Profil

Actions

Propel » Historique » Révision 3

« Précédent | Révision 3/4 (diff) | Suivant »
Anonyme, 03/01/2009 08:32
Ajout de la référence à TORQUE


= Début 2009, l'équipe de Gepi a décidé d'intégrer une librairie php d'[http://fr.wikipedia.org/wiki/Mapping_objet-relationnel ORM] : [http://propel.phpdb.org/trac/ Propel 1.3] =

Installer Propel sur son environnement de développement

--> Voir la [http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Installation documentation officielle(EN)].

Principes généraux
  • Propel est une librairie ORM qui tente de porter [http://fr.wikipedia.org/wiki/NHibernate Hibernate] (projet JAVA) en php. Elle est basée sur la même logique de construction que [http://db.apache.org/torque/ TORQUE] qui est lui aussi un projet d'ORM pour java.BR
  • Son principe est simple : on fournit un fichier xml qui explique la structure de la base de données et Propel génère toutes les classes utiles pour interférer avec la base ainsi que le SQL de création de la base.BR
  • Le motif de base de Propel est le Data Mapper et a donc besoin de plusieurs classes pour chaque table.BR
    BR
{{{
  1. Exemple
    la table travailleurs (id, nom, metier) va entrainer la création de 4 classes :
    - Travailleur qui implémente BaseTravailleur
    - TravailleurPeer qui implémente BaseTravailleurPeer

BaseTravailleurPeer ne contient que des méthodes statiques destinées en interférer avec la base.
BaseTravailleur contient toutes les propriétés de l'objet (les champs de la table et quelques autres) et les méthodes de base (gettings, settings, ...)

}}}

  • Il faut donc générer ces classes à l'aide d'un fichier de configuration : schema.xml.
{{{
  1. Config
    Le fichier xml contient la structure de la baseBR

<database name="gepi" defaultMethod="native">
<table name="travailleurs" description="Les travailleurs de Gepi sont stockés dans cette table">
<column name="id" type="INTEGER" required="true" primaryKey="true" description="id unique de la table travailleurs" />
<column name="nom" type="VARCHAR" size="255" required="true" description="Nom du travailleur de Gepi" />
<validator column="nom">
<rule name="unique" message="Ce nom est déjà pris, vous devez en changer !" />
</validator>
<column name="metier" type="VARCHAR" size="255" required="true" description="Métier du travailleur de Gepi" />
</table>
</database>

}}}
--> Rien de bien compliqué même si on voit que le fichier peut être très complet. La balise <validator> peut permettre d'ajouter une méthode de vérification du contenu du champ avant sa sauvegarde (à ce sujet, voir [http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Validators la documentation officielle]).BR
BR

A cette structure, on peut ajouter les relations avec les autres tables. Exemple avec la table photos(id, travailleur_id, chemin_photo).BR

{{{
  1. Config
    Au fichier précédent, on ajoute (avant </database>)
&lt;table name="photos" description="Stockage du chemin relatif des photographies des travailleurs de Gepi"&gt;
&lt;column name="id" type="INTEGER" required="true" primaryKey="true" description="id unique de la table photo" /&gt;
&lt;column name="travailleur_id" type="INTEGER" required="true" description="id du travailleur en question" /&gt;
&lt;foreign-key foreignTable="travailleurs"&gt;
&lt;reference local="travailleur_id" foreign="id" /&gt;
&lt;/foreign-key&gt;
&lt;column name="chemin_photo" type="VARCHAR" size="255" required="true" description="Chemin relatif du stockage de la photographie" /&gt;
&lt;/table&gt;

}}}

--> Il est donc important de bien travailler sur ce fichier xml avant de passer à la suite ==> [wiki:propel_crud Utiliser les classes générées par Propel].

Mis à jour par il y a plus de 15 ans · 3 révisions