Projet

Général

Profil

Propel crud » Historique » Version 1

Anonyme, 31/12/2008 11:18
Prise en main de la première version (google-traduction) de la page.

1 1
''Ceci est une traduction libre de la page officielle de la documentation de Propel [http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/BasicCRUD /ICI]''
2
3
 = Base C.R.U.D. Opérations = 
4
5
 Ce guide va vous montrer comment effectuer les opérations de base CRUD (Créer, récupérer, UPDATE, DELETE) sur votre base de données en utilisant Propel. Par souci de cohérence, nous allons utiliser la librairie simplifié exemple modèle de données du Guide de démarrage rapide. 
6
7
 Les exemples dans ce guide suppose que vous avez déjà installé et paramétré Propel. 
8
9
 == CREATE == 
10
11
 Pour ajouter de nouvelles données dans la base de données, il faut instancier un des objets générés par Propel et ensuite appeler la méthode setChamp() appropriée. Propel générera le SQL qui va bien pour faire l'insertion. 
12
13
 === Simple INSERT ===
14
15
 Dans sa forme la plus simple, on crée un nouveau tuple de cette façon : 
16
17
18
{{{
19
# php 
20
 / * Initialiser Propel, etc * / 
21
22
 $ author = new Author (); 
23
 $ author-> setFirstName ( "Jack"); 
24
 $ author-> setLastName ( "London"); 
25
 $ author-> save ();
26
}}}
27
 
28
Propel va traduire ces lignes de code par :
29
30
{{{
31
#! sql 
32
 INSERT INTO auteur (prenom, nom) VALUES ( 'Jack', 'London');
33
}}}
34
35
36
 === Rangée Insérer connexes === 
37
38
 De plus, Propel sait si un objet a été sauvegardé ou pas. Donc on peut créer plusiers tuples de plusieurs tables différents et tout sauvegarder une seule fois :
39
40
{{{
41
 #! php 
42
 / * Initialiser Propel, etc * / 
43
44
 / / 1) Créer un Auteur (rangée de 'auteur' tableau) 
45
46
 include_once 'librairie / Author.php'; 
47
48
 $ author = new Author (); 
49
 $ author-> setFirstName ( "Leo"); 
50
 $ author-> setLastName ( "Tolstoï"); 
51
 / / Note: ce tuple n'est pas encore dans la base
52
53
 / / 2) Créer un Editeur (ligne de "éditeur" tableau) 
54
55
 include_once 'librairie / Publisher.php'; 
56
57
 $ pub = new Editeur (); 
58
 $ pub-> setName ( "Viking Press"); 
59
 / / Note: ce tuple n'est pas encore dans la base 
60
61
 / / 3) Créer un livre (ligne de "livre" tableau) 
62
63
 include_once 'librairie / Book.php'; 
64
65
 $ livre = new livre (); 
66
 $ livre-> setTitle ( "Guerre et Paix"); 
67
 $ livre-> setIsbn ( "0140444173"); 
68
 $ livre-> setPublisher ($ pub); 
69
 $ livre-> setAuthor ($ author); 
70
 $ livre-> save (); / / enregistre l'ensemble des 3 objets dans la base avec les dépendances (clés étrangères) qui vont bien ! 
71
}}}
72
73
 Parce que Propel sait si un objet a été enregistré ou non, il est capable avec save () d'analyser tous les objets avant de les ajouter en gérant les relations à l'objet livre. (Plus d'info à ce sujet sur le site de Propel : [http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Relationships Relationships]) .
74
75
 == RETRIEVE ==
76
77
 Récupérer des objets de la base de données, également dénommé''objets''hydratant, est essentiellement le processus d'exécution d'une requête SELECT sur la base de données pour peupler une nouvelle instance de l'objet avec le contenu de chaque ligne retournée. 
78
79
 Dans Propel, vous utilisez la générés par les pairs''''classes existantes pour sélectionner les lignes de la base de données. Les classes Peer sont des classes exclusivement avec des méthodes statiques pour effectuer des opérations sur une table particulière. Il existe plusieurs méthodes produites pour vous aider à choisir un seul objet ou d'interrogation pour plusieurs objets de la base de données. 
80
81
 === Récupération de la clé primaire === 
82
83
 La façon la plus simple pour récupérer un objet (ligne) de la base de données, est d'utiliser les produits retrieveByPK''()''méthode. Cette méthode doit être la valeur de clé primaire pour l'objet que vous souhaitez récupérer. 
84
85
 ==== Unique PK-colonel ==== 
86
87
 Habituellement, votre table aura une seule colonne comme une clé primaire, ce qui signifie que la retrieveByPK''()''méthode accepte un seul paramètre. 
88
89
 ((( 
90
 #! php 
91
 <? php 
92
93
 firstBook $ = BookPeer:: retrieveByPK (1); 
94
 / / $ FirstBook maintenant est un livre objet, ou NULL si aucune correspondance n'a été trouvée. 
95
 ))) 
96
97
 ==== Multi-colonel PK ==== 
98
99
 Dans certains cas, votre clé primaire mai composé de plus d'une colonne. Dans ce cas, la retrieveByPK''()''méthode sera créé pour accepter des paramètres multiples, un pour chaque colonne de clé primaire. 
100
101
 Par exemple, si nous avions un tableau, avec un multi-colonne de clé primaire, définie comme ceci: 
102
 ((( 
103
 #! xml 
104
    <table name="multicolpk_example" phpName="MultiColPKExample"> 
105
       <column name="id1" type="INTEGER" primaryKey="true"/> 
106
       <column name="id2" type="INTEGER" primaryKey="true"/> 
107
       <! - Les autres colonnes ... -> 
108
    </ table> 
109
 ))) 
110
111
 ... alors votre retrieveByPK''()''méthode serait invoquée comme ceci: 
112
113
 ((( 
114
 #! php 
115
 <? php 
116
117
 myObject $ = MultiColPKExamplePeer:: retrieveByPK (1,2); 
118
 ))) 
119
120
 ==== Obtenir plusieurs objets par PK ==== 
121
122
 Vous pouvez également sélectionner plusieurs objets en fonction de leurs clés primaires, en appelant le généré retrieveByPKs''()''méthode, qui prend en paramètre un tableau de clés primaires: 
123
124
 ((( 
125
 #! php 
126
 <? php 
127
128
 selectedBooks $ = BookPeer:: retrieveByPKs (array (1,2,3,4,5,6,7)); 
129
 / / $ SelectedBooks est un tableau d'objets Réservez 
130
 ))) 
131
132
 ''Il est à noter que ceci ne fonctionne que pour les tables avec une seule colonne de clés primaires.'' 
133
134
 === Interrogation de la base de données === 
135
136
 Pour sélectionner plusieurs lignes par des critères autres que la clé primaire, nous avons deux choix: 1) d'utiliser Propel la''classe''de critères, ou 2) d'écrire SQL personnalisé. Les critères de''classe''offre une approche relativement simple à la construction d'une requête. C'est la base de données logique de neutralité et de simplicité en faire un bon choix pour l'expression d'un grand nombre de requêtes, mais pour une requête très complexe, elle mai s'avérer plus efficace (et moins douloureuses) à simplement utiliser une requête SQL personnalisée à hydrater votre Propel objets. 
137
138
 ==== ==== Critères simples 
139
140
 Voici quelques exemples de critères simples être utilisé pour renvoyer plusieurs objets. 
141
142
 '' 'Exemple 1:''' Trouver tous les auteurs avec le premier nom de Karl, mais le nom est _pas_ Marx. 
143
144
 ((( 
145
 #! php 
146
 <? php 
147
148
 $ c = de nouveaux critères (); 
149
 $ c-> ajouter (AuthorPeer:: first_name, "Karl"); 
150
 $ c-> ajouter (AuthorPeer:: nom, "Marx", Critères:: NOT_EQUAL); 
151
152
 = $ auteurs AuthorPeer:: doSelect ($ c); 
153
 / / $ Array contient des auteurs de l'auteur objets 
154
 ))) 
155
156
 ... résultats dans la requête SQL comme: 
157
 ((( 
158
 #! sql 
159
 SELECT ... De l'auteur OÙ author.FIRST_NAME = 'Karl' ET author.LAST_NAME <> 'Marx'; 
160
 ))) 
161
162
 '' 'Exemple 2:''' Trouver tous les auteurs avec le dernier nom de Tolstoï, Dostoïevski, ou Bakhtine 
163
164
 ((( 
165
 #! php 
166
 <? php 
167
168
 $ c = de nouveaux critères (); 
169
 $ c-> ajouter (AuthorPeer:: nom, array ( "Tolstoï", "Dostoïevski", "Bakhtine"), Critères:: IN); 
170
171
 = $ auteurs AuthorPeer:: doSelect ($ c); 
172
 / / $ Array contient des auteurs de l'auteur objets 
173
 ))) 
174
175
 ... résultats dans la requête SQL comme: 
176
 ((( 
177
 #! sql 
178
 SELECT ... De l'auteur OU DANS author.LAST_NAME ( «Tolstoï», «Dostoïevski», «Bakhtine '); 
179
 ))) 
180
181
182
 Logiquement ==== ==== Complexe Critères 
183
184
 Quand vous avez besoin d'exprimer relations logiques (ET, OU, etc) entre les différents critères de clauses, vous devez combiner manuellement chaque Critère''''objets ensemble. Le critère''''les objets sont les composants qui sont assemblés en toute transparence les critères''''objet lorsque vous utilisez les critères''-> ajouter ()''méthode. 
185
186
 '' 'Exemple 1:''' Trouver tous les auteurs avec le premier nom de "Leo" ou le dernier nom de "Tolstoï", "Dostoïevski", ou "Bakhtine" 
187
188
 ((( 
189
 #! php 
190
 <? php 
191
192
 $ c = de nouveaux critères (); 
193
 cton1 $ = $ c-> getNewCriterion (AuthorPeer:: first_name, "Léon"); 
194
 cton2 $ = $ c-> getNewCriterion (AuthorPeer:: nom, array ( "Tolstoï", "Dostoïevski", "Bakhtine"), Critères:: IN); 
195
 
196
 / / Les combiner 
197
 $ cton1-> Addor ($ cton2); 
198
 
199
 / / Ajouter les critères 
200
 $ c-> add ($ cton1); 
201
 ))) 
202
203
 ... résultats dans la requête SQL comme: 
204
 ((( 
205
 #! sql 
206
 SELECT ... De l'auteur WHERE (author.FIRST_NAME = 'Leo' OU DANS author.LAST_NAME ( «Tolstoï», «Dostoïevski», «Bakhtine ')); 
207
 ))) 
208
209
 Il ya aussi des''critères''raccourcis si vous souhaitez effectuer une requête avec les relations logiques entre les clauses de référence que''la même colonne''. 
210
211
 '' 'Exemple 2:''' Trouver tous les auteurs avec le premier nom de «Leo» ou «Karl» 
212
213
 Utiliser Critère verbose''approche'', cela ressemble à: 
214
 ((( 
215
 #! php 
216
 <? php 
217
218
 $ c = de nouveaux critères (); 
219
 cton1 $ = $ c-> getNewCriterion (AuthorPeer:: first_name, "Léon"); 
220
 cton2 $ = $ c-> getNewCriterion (AuthorPeer:: first_name, "Karl"); 
221
 
222
 / / Les combiner 
223
 $ cton1-> Addor ($ cton2); 
224
 
225
 / / Ajouter les critères 
226
 $ c-> add ($ cton1); 
227
 ))) 
228
229
 En utilisant un raccourci''''méthodes Critères: 
230
 ((( 
231
 #! php 
232
 <? php 
233
234
 $ c = de nouveaux critères (); 
235
 $ c-> ajouter (AuthorPeer:: first_name, "Léon"); 
236
 $ c-> Addor (AuthorPeer:: first_name, "Karl"); 
237
 ))) 
238
239
 Il est important de noter que ces critères sténographie''''méthodes ont un certain nombre de limites - surtout qu'ils ne fonctionne que pour les relations seule colonne. De l'auteur, il est conseillé de ne pas utiliser ces méthodes lorsque vous avez besoin d'exprimer les relations entre logique clause car ils masquent le réel entre les relationsihps Critère''et''objets peuvent facilement conduire à difficiles à déboguer les problèmes de génération de requête. (Ces méthodes vont probablement changer ou disparaître dans Propel 2). 
240
241
 Utiliser ==== ==== SQL personnalisé 
242
243
 Propel est conçu pour travailler avec vous plutôt que contre vous. Dans de nombreux cas, la rédaction d'un complexe requête en utilisant les critères''''finit par être vraiment désordre et encore moins intelligible ou à maintenir un niveau de requête SQL. Propel a été créé pour travailler les limites inhérentes d'une base de données''neutre''système de critères en la rendant facile pour vous d'utiliser vos propres requêtes SQL pour les ensembles de résultats hydrate. 
244
245
 Ainsi, avec seulement un peu plus de travail, vous pouvez également obtenir des objets de votre base de données en utilisant SQL. Utiliser SQL pour interroger la base de données nous introduit à la populateObjects généré''()''méthode dans notre classes Peer - qui est appelé dans les coulisses par la doSelect''()''méthode. Cette méthode attend d'être adopté une créole''!''Objet ResultSet, indexé numériquement (c'est-à-dire qui a été créé à l'aide! ResultSet:: FETCHMODE_NUM option''à executeQuery ()''). 
246
247
 '' 'Exemple 1:''' Utilisez des sous-sélectionne pour peupler la base de données 
248
249
 ((( 
250
 #! php 
251
 <? php 
252
253
 $ con = Propel:: getConnection (database_name); 
254
255
 $ sql = "SELECT .* livres des livres lorsqu'ils ne sont pas EXISTS (SELECT id de l'examen OÙ book_id = book.id)"; 
256
 $ stmt = $ con-> prepare ($ sql); 
257
 $ stmt-> execute (); 
258
259
 $ livres = BookPeer:: populateObjects ($ stmt); 
260
 ))) 
261
262
 Des choses importantes à retenir lorsque vous utilisez SQL personnalisé pour remplir Propel: 
263
   *! ResultSet colonne doit être indexé numériquement 
264
   *! ResultSet doit contenir toutes les colonnes de l'objet 
265
   *! ResultSet doit avoir les colonnes''dans le même ordre'', telles qu'elles sont définies dans le (((schema.xml))) fichier 
266
267
 MISE À JOUR == == 
268
269
 Mise à jour de la base de données comporte essentiellement des lignes de récupérer des objets, de modifier le contenu, puis les enregistrer. Dans la pratique, pour Propel, il s'agit d'une combinaison de ce que nous avons déjà vu dans le récupérer et créer des sections. 
270
271
 ((( 
272
 #! php 
273
 <? php 
274
275
 / / 1) Récupère un objet de clé primaire 
276
277
 = $ myBook BookPeer:: retrieveByPK (1); 
278
279
 / / 2) de mettre à jour les valeurs et save (). 
280
281
 myBook $ -> setTitle ( "Guerre et Paix"); 
282
 $ myBook-> save (); 
283
 ))) 
284
285
 Il n'y a vraiment pas grand-chose de bien plus que cela. Bien sûr, vous pouvez également mettre à jour les relations d'une manière similaire à ce qui a déjà été démontré dans la section CREATE. 
286
287
 ((( 
288
 #! php 
289
 <? php 
290
 / * Initialiser Propel, etc * / 
291
292
 / / 1) Auteur de récupérer une 
293
 $ auteur = AuthorPeer:: retrieveByPK (1); 
294
295
 / / 2) récupérer un livre 
296
 $ livre = BookPeer:: retrieveByPK (1); 
297
298
 / / 3) maintenant aveuglément set $ auteur que l'auteur de livre $! 
299
300
 $ livre-> setAuthor ($ author); 
301
 $ livre-> save (); 
302
 ))) 
303
304
 == == DELETE 
305
306
 Suppression d'objets peut être accompli en utilisant les classes Peer ou l'objet classes. 
307
308
 === === L'aide par les pairs 
309
310
 Vous pouvez utiliser les produits doDelete''()''de la méthode générée par les pairs des classes à supprimer des lignes de vos tables. Vous pouvez passer cette méthode une clé primaire, une instance de l'objet, ou même un objet de critères (mais ce n'est pas très utile, puisque vous ne pouvez supprimer que par la clé primaire). 
311
312
 '' 'Exemple 1:''' Supprimer l'aide de la clé primaire 
313
314
 ((( 
315
 #! php 
316
 <? php 
317
318
 BookPeer:: doDelete (1); 
319
 ))) 
320
321
 '' 'Exemple 2:''' Supprimer l'aide de l'objet instancié 
322
323
 ((( 
324
 #! php 
325
 <? php 
326
327
 $ livre = BookPeer:: retrieveByPK (1); 
328
 BookPeer:: doDelete ($ livre); 
329
 ))) 
330
331
 L'aide d'objets === === 
332
333
 Par souci de cohérence avec d'autres C.R.U.D. opérations, vous pouvez également supprimer la ligne d'une base de données à l'aide de la classe d'objets. Certaines personnes préfèrent le faire de cette façon, l'instanciation d'un objet, puis appeler la''delete ()''méthode sur celle-ci. D'autres estiment que cela est "bizarre", car alors vous êtes à gauche avec un objet qui ne fait point à la ligne une base de données. Quel que soit - vous êtes libre de choisir:) 
334
335
 ((( 
336
 #! php 
337
 $ livre = BookPeer:: retrieveByPK (1); 
338
 $ livre-> delete (); 
339
 / / (Et maintenant vous devez vous rappeler que vous ne pouvez plus utiliser l'objet $ livre) 
340
 )))