Propel » Historique » Version 1
Anonyme, 01/01/2009 13:21
1 | 1 | = Début 2009, l'équipe de Gepi a décidé d'intégrer une librairie php d'ORM : Propel 1.3 = |
|
---|---|---|---|
2 | |||
3 | == Principes généraux == |
||
4 | |||
5 | * Propel est une librairie ORM qui tente de porter Hibernate (projet JAVA) en php.[[BR]] |
||
6 | * 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.[[BR]] |
||
7 | * Le motif de base de Propel est le Data Mapper et a donc besoin de plusieurs classes pour chaque table.[[BR]] |
||
8 | [[BR]] |
||
9 | |||
10 | {{{ |
||
11 | # Exemple |
||
12 | la table travailleurs (id, nom, metier) va entrainer la création de 4 classes : |
||
13 | - Travailleur qui implémente BaseTravailleur |
||
14 | - TravailleurPeer qui implémente BaseTravailleurPeer |
||
15 | |||
16 | BaseTravailleurPeer ne contient que des méthodes statiques destinées en interférer avec la base. |
||
17 | 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, ...) |
||
18 | |||
19 | }}} |
||
20 | |||
21 | * Il faut donc générer ces classes à l'aide d'un fichier de configuration : schema.xml. |
||
22 | |||
23 | {{{ |
||
24 | # Config |
||
25 | Le fichier xml contient la structure de la base[[BR]] |
||
26 | |||
27 | <database name="gepi" defaultMethod="native"> |
||
28 | <table name="travailleurs" description="Les travailleurs de Gepi sont stockés dans cette table"> |
||
29 | <column name="id" type="INTEGER" required="true" primaryKey="true" description="id unique de la table travailleurs" /> |
||
30 | <column name="nom" type="VARCHAR" size="255" required="true" description="Nom du travailleur de Gepi" /> |
||
31 | <validator column="nom"> |
||
32 | <rule name="unique" message="Ce nom est déjà pris, vous devez en changer !" /> |
||
33 | </validator> |
||
34 | <column name="metier" type="VARCHAR" size="255" required="true" description="Métier du travailleur de Gepi" /> |
||
35 | </table> |
||
36 | </database> |
||
37 | |||
38 | }}} |
||
39 | --> 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]] |
||
40 | [[BR]] |
||
41 | |||
42 | A cette structure, on peut ajouter les relations avec les autres tables. Exemple avec la table photos(id, travailleur_id, chemin_photo).[[BR]] |
||
43 | |||
44 | {{{ |
||
45 | # Config |
||
46 | Au fichier précédent, on ajoute (avant </database>) |
||
47 | |||
48 | <table name="photos" description="Stockage du chemin relatif des photographies des travailleurs de Gepi"> |
||
49 | <column name="id" type="INTEGER" required="true" primaryKey="true" description="id unique de la table photo" /> |
||
50 | <column name="travailleur_id" type="INTEGER" required="true" description="id du travailleur en question" /> |
||
51 | <foreign-key foreignTable="travailleurs"> |
||
52 | <reference local="travailleur_id" foreign="id" /> |
||
53 | </foreign-key> |
||
54 | <column name="chemin_photo" type="VARCHAR" size="255" required="true" description="Chemin relatif du stockage de la photographie" /> |
||
55 | </table> |
||
56 | |||
57 | }}} |
||
58 | |||
59 | --> 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]. |