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