-
Notifications
You must be signed in to change notification settings - Fork 16
/
utilisation.gtw
96 lines (58 loc) · 3.81 KB
/
utilisation.gtw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
~~LANG:EN@enman:daos/use~~
Vous avez vu comment décrire dans un fichier XML un DAO (voir [[fichier_de_base]]). Ce fichier, vous devez le stocker dans un répertoire @@F@daos/@@ d'un module et le nommer comme ceci : @@F@nom.dao.xml@@. //nom// est le nom de votre DAO.
Souvenez-vous qu'en fait, à partir d'un fichier DAO, vous définissez deux objets PHP :
* un objet DAO qui est une factory, basé sur la classe @@C@jDaoFactoryBase@@ : elle permet de récupérer, insérer, modifier, effacer un ou plusieurs enregistrements. Elle propose des méthodes de base, mais contient aussi les méthodes que vous avez définis dans le fichier XML dans la section @@E@<factory>@@.
* un objet record DAO, basé sur la classe @@C@jDaoRecordBase@@, qui représente un enregistrement et dont vous avez décrit les propriétés dans la section @@E@<record>@@.
===== Récupérer la factory =====
Pour récupérer ces objets il faut passer par l'objet @@C@jDao@@ qui propose diverses méthodes statiques :
* @@M@get()@@ : permet d'obtenir une factory. Renvoie toujours la même instance (utilise un singleton)
* @@M@create()@@ : permet d'obtenir une nouvelle instance d'une factory. Rarement utile.
* @@M@createRecord()@@ : permet d'obtenir un objet DAO record vide.
* @@M@createConditions()@@ : permet d'obtenir un objet @@C@jDAOConditions@@ qui permet d'indiquer des conditions de sélection pour récupérer un ensemble d'objets record.
@@M@get()@@, @@M@create()@@ et @@M@createRecord()@@ prennent tous en argument un sélecteur de fichier DAO et un deuxième paramètre facultatif qui est le nom du [[/bd|profil jDb]] à utiliser (si paramètre absent, il prendra celui par défaut).
Si le profil jDb utilisé spécifie un préfixe de table, alors toutes les tables indiquées dans le DAO verront leur nom préfixé par la valeur de ce paramètre.
En admettant qu'il y ait un fichier DAO @@F@foo.dao.xml@@ dans le module bar :
<code php>
$maDao = jDao::get("bar~foo");
// ou si cette ligne de code est dans un fichier du module bar :
$maDao = jDao::get("foo");
$monRecord = jDao::createRecord("foo");
</code>
@@V@$maDao@@ contient une factory de foo, et @@V@$monRecord@@ un enregistrement vide de type //foo//.
===== Créer, modifier, effacer un enregistrement =====
Les méthodes @@M@insert()@@, @@M@update()@@, et @@M@delete()@@ de la factory sont faites pour ça. Aux deux premières, vous indiquez un record. Pour @@M@delete()@@, vous indiquez les clés de l'enregistrement.
==== Création ====
Il faut récupérer un nouvel objet record, le remplir, et ensuite appeler la méthode @@M@insert()@@
<code php>
// instanciation de la factory
$maFactory = jDao::get("foo");
// creation d'un record correspondant au dao foo
$record = jDao::createRecord("foo");
// on remplit le record
$record->champ1 = "hello";
$record->champ2 = "...";
// on le sauvegarde dans la base
$maFactory->insert($record);
</code>
S'il y a des champs de type autoincrement, les propriétés correspondantes dans @@V@$record@@ seront mises à jour avec la nouvelle valeur.
==== Modification ====
Le processus est le suivant : on récupère un objet record, on modifie ses propriétés, et on appelle la méthode @@M@update()@@.
<code php>
// instanciation de la factory
$maFactory = jDao::get("foo");
// récupération du record dont l'identifiant est 3
$record = $maFactory->get(3);
// on modifie le record
$record->champ1 = "hello";
$record->champ2 = "...";
// on le sauvegarde dans la base
$maFactory->update($record);
</code>
==== Destruction ====
Il suffit d'appeler la méthode @@M@delete()@@ en donnant l'id du record à détruire
<code php>
// instanciation de la factory
$maFactory = jDao::get("foo");
// destruction du record dont l'identifiant est 3
$maFactory->delete(3);
</code>