From 654a9cae43358c7eecf3b522e9876aa7815e2453 Mon Sep 17 00:00:00 2001
From: Fabio Bas
-We are going to use Data Access Objects (DAO) to abstract our data access mechanisms. If in future we decide to use a different DBMS (e.g. PostgreSQL, Oracle) to store our blog data, we only need to change the database source name (DSN) and we can keep our PHP code intact. +We are going to use Data Access Objects (DAO) to abstract our data access mechanisms. If in future we decide to use a different DBMS (e.g. PostgreSQL, Oracle) to store our blog data, we only need to change the database source name (DSN) and we can keep our PHP code intact.
-To further abstract the actual database tables, we will also use the Active Record (AR) feature. Each data record will be represented as an Active Record object which is capable of performing query, saving and deletion without writing SQL statements. +To further abstract the actual database tables, we will also use the Active Record (AR) feature. Each data record will be represented as an Active Record object which is capable of performing query, saving and deletion without writing SQL statements.
@@ -36,11 +36,11 @@ We modify our application configuration file protected/application.xml
-The configuration above shows that we are adding two modules to our application. The TDataSourceConfig module is configured with the connection string sqlite:protected/data/blog.db which points to our SQLite database. This connection is used by the TActiveRecordConfig module which is required by Active Record. +The configuration above shows that we are adding two modules to our application. The TDataSourceConfig module is configured with the connection string sqlite:protected/data/blog.db which points to our SQLite database. This connection is used by the TActiveRecordConfig module which is required by Active Record.
-We need to create two Active Record classes, UserRecord and PostRecord, to represent data records in the users and posts tables, respectively. Active Record classes must extend from the base class ActiveRecord, and must define property names that matches with the field names of the corresponding table. +We need to create two Active Record classes, UserRecord and PostRecord, to represent data records in the users and posts tables, respectively. Active Record classes must extend from the base class ActiveRecord, and must define property names that matches with the field names of the corresponding table.
@@ -47,7 +47,7 @@ So we need to modify again our application configuration in the services section
- In the Output Folder field we used the namespace format again, the path Application.database indicates that we want to put our class's files in the protected/database/ folder. + In the Output Folder field we used the namespace format again, the path Application.database indicates that we want to put our class's files in the protected/database/ folder. The * in the Table Name field means that we want to generate all AR classes, you can specify a table name instead if you want to generate just a specific AR class.
@@ -121,7 +121,7 @@ The method withXXX() (where XXX is the relationship property name, in t-Further detailed documentation can be found in the quickstart Active Record docs. +Further detailed documentation can be found in the quickstart Active Record docs.
\ No newline at end of file diff --git a/demos/blog-tutorial/protected/pages/Day2/CreateDB.page b/demos/blog-tutorial/protected/pages/Day2/CreateDB.page index 1f7085d7..c3494091 100755 --- a/demos/blog-tutorial/protected/pages/Day2/CreateDB.page +++ b/demos/blog-tutorial/protected/pages/Day2/CreateDB.page @@ -3,7 +3,7 @@-Most Web applications use database to keep data. Our blog system is not an exception. In this section, we will describe how to write database-driven pages for our blog system. We will use techniques including database access object (DAO) and Active Record. +Most Web applications use database to keep data. Our blog system is not an exception. In this section, we will describe how to write database-driven pages for our blog system. We will use techniques including database access object (DAO) and Active Record.
diff --git a/demos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page b/demos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page
deleted file mode 100755
index bc817c92..00000000
--- a/demos/blog-tutorial/protected/pages/Day2/fr/ConnectDB.page
+++ /dev/null
@@ -1,47 +0,0 @@
-
-Pour pouvoir utiliser la base de données que nous venons de créer, nous devons tout d'abord établir une connexion.
-
-Nous allons utiliser Data Access Objects (DAO) pour établir une couche d'abstraction. Si dans le futur nous décidions d'utiliser un autre SGBD (ie: PostgreSQl, Oracle, ...), il nous suffirait de modifier la chaine de connexion (DSN) et nous pourrions conserver notre code PHP intact.
-
-Pour une meilleure abstraction de notre base de données, nous utilisons aussi la fonctionnalité Active Record (AR). Chaque enregistrement est ainsi représenté par un objet qui a la possibilité d'exécuter des requêtes, de mettre à jour les données, de les supprimer et ceci sans écrire la moindre commande SQL.
-
-Nous modifions notre fichier de configuration de l'application protected/application.xml en insérant les lignes suivantes, qui indiquent à Active Record comment se connecter à notre base de données.
-
-Dans la configuration précédente, nous avons ajouté deux modules à notre application. Le module TDataSourceConfig est configuré avec la chaine de connexion sqlite:protected/data/blog.db qui pointe vers notre base de données. Cette connexion est utilisée par le module TActiveRecordConfig qui est requis pour l'utilisation d'Active Record.
-
-Nous avons besoin de définir deux classes Active Record, UserRecord et PostRecord, qui représentent respectivement les tables users et posts. Les classes Active Record doivent hériter de la classe ActiveRecord, et doivent définir les propriétés qui correspondent aux champs de la table correspondante.
-
-Pour une meilleure organisation de notre arborescence, nous créons un nouveau dossier protected/database qui contiendra nos deux classes. Nous modifions notre fichier de configuration de l'application en y insérant les lignes suivantes. Ceci est équivalent à inclure le dossier protected/database à notre chemin d'inclusion de PHP (include_path). Cela nous permet d'utiliser nos classes sans avoir besoin de les inclure explicitement.
-
-Au lieu de créer nos classes manuellement, nous allons utiliser les outils en ligne de commande de PRADO pour qu'il nous génère les classes.
-
-Dans le dossier blog, lancer la commande suivante pour entrer dans le mode interactif de l'outil en ligne de commande:
-
-Vous devriez voir
-
-A l'invite de commande, entrer les deux commandes suivantes pour créer les classes UserRecord et PostRecord.
-
-Ici, nous avons utilisés les espaces de noms pour indiquer où les classes seront créées. Le chemin Application.database.UserRecord indique que nous désirons que la classe soit insérée dans protected/database/UserRecord.php.
-
-Nous devrions voir l'arborescence suivante ainsi que nos deux nouveaux fichiers dans le dossier protected/database:
-
-Si vous consultez le fichier PostRecord, vous devriez voir le contenu suivant:
-
-Comme vous pouvez le constater, pour chaque champs de la table posts, la classe déclare un membre correspondant. La constante TABLE indique le nom de la table que gère la classe PostRecord. La méthode statique finder() permet d'effectuer des requêtes et de lire les données sous forme d'objets PostRecord.
-
-Vous pouvez utiliser l'outil en ligne de commande pour tester nos nouvelles classes. En restant dans le mode interactif de l'outil en ligne de commande, vous pouvez saisir les commandes PHP et voir ce qui suit. Vous pouvez tester des commandes telles que UserRecord::finder()->findAll().
-
-Rappellez-vous qu'il y a une relation entre les tables users et posts. Le diagramme des relations est indiqué ci-après.
-
-A partir de ce diagramme, nous voyons que la table posts contient un champ author_id. Le champ author_id est une clé étrangère qui référence la table users. En particulier, les valeurs du champ author_id doivent apparaitre dans dans le champ username de la table users. Une des conséquences de cette relation, en réfléchissant orienté objet, est que chaque "post" repose sur un "author" et qu'un "author" peut avoir plusieurs "posts".
-
-Nous pouvons modéliser les relations entre posts and users dans nos classes PostRecord and UserRecord en les modifiant comme ci-dessous :
-
-La propriété statique $RELATIONS de la classe PostRecord définit que la propriété $author fait référence à un UserRecord. Dans le tableau : array(self::BELONGS_TO, 'UserRecord'), le premier élément défini le type de relation, dans notre cas, self::BELONGS_TO. Le deuxième élément est le nom de l'objet en relation, dans notre cas UserRecord. La classe UserRecord est définie comme ci-dessous, la différence est que chaque objet UserRecord contient plusieurs PostRecord.
-
-Un tableau de UserRecord ainsi que les messages correspondants peuvent être lu de la manière suivante :
-
-Plus d'informations sont disponibles dans le manuel de démarrage rapide Active Record.
-
-La plupart des applications Web utilisent une base de données pour conserver les informations. Notre blog n'est pas une exception. Dans cette section, nous allons décrire comment écrire une application qui interagit avec une base de données. Nous allons utiliser les deux moyens suivants database access object (DAO) et Active Record.
-
-Pour ce tutoriel, nous avons simplifié les besoins, nous aurons juste à gérer les utilisateurs et les messages. Nous allons donc créer deux tables users et posts, comme décrit dans le diagramme ci-après.
-
-Nous utilisons une base de données SQLite 3 pour conserver nos données. La première étape est de convertir notre diagramme en commandes SQL et de l'enregistrer dans le fichier protected/schema.sql.
-
-Nous utilisons après ceci, les outils en ligne de commande SQLite pour créer la base de données. Nous avons créé un dossier protected/data qui contiendra le fichier de base de données. Nous lançons maintenant la ligne de commande suivante dans le dossier protected/data.
-
-La base de données est ainsi créée dans le fichier protected/data/blog.db et nous pouvons maintenant voir la l'arborescence suivante :
-
-Untuk menggunakan database yang baru saja kita buat, pertama kita perlu melaksanakan koneksinya.
-
-Kita akan menggunakan Data Access Objects (DAO) untuk memisahkan mekanisme akses data kita. Jika nanti kita menggunakan DBMS yang berbeda (misalnya PostgreSQL, Oracle) untuk menyimpan data blog, kita hanya perlu mengubah nama sumber database atau data source nama (DSN) dam kita dapat menjaga kode PHP kita tetap utuh.
-
-Selanjutnya untuk memisahkan tabel database sebenarnya, kita juga akan menggunakan fitur Rekaman Aktif (AR). Setiap rekaman data akan disajikan sebagai obyek Rekaman Aktif yang mampu melakukan query, menyimpan dan menghapus tanpa menulis pernyataan SQL.
-
-Kita memodifikasi file konfigurasi aplikasi kita protected/application.xml dengan menyisipkan baris berikut, yang memberitahu Rekaman Aktif bagaimana untuk menghubungkan ke database yang baru saja kita buat:
-
-Konfigurasi di atas memperlihatkan bahwa kita menambahkan dua modul pada aplikasi kita. Modul TDataSourceConfig dikonfigurasi dengan string koneksi sqlite:protected/data/blog.db yang mengarah ke SQLite database kita. Koneksi ini dipakai oleh modul TActiveRecordConfig yang dibutuhkan leh Rekaman Aktif.
-
-Kita perlu membuat dua kelas Rekaman Aktif, UserRecord dan PostRecord, masing-masing untuk mewakili rekaman data dalam tabel users dan posts. Kelas Rekaman Aktif harus diperluas dari kelas basis ActiveRecord, dan harus mendefinisikan nama properti yang sama dengan nama field dari tabel terkait.
-
-Untuk mengatur lebih baik direktori, kita membuat direktori baru protected/database guna menampung file kelas. Kita juga memodifikasi konfigurasi aplikasi kita dengan menyisipkan baris berikut. Ini sama dengan menambahkan direktori protected/database ke PHP include_path, yang membolehkan kita untuk menggunakan kelas tanpa secara eksplisit menyertakannya.
-
-Daripada menulis kelas secara manual, kita akan menggunakan piranti baris perintah PRADO lagi untuk membuat kelas bagi kita.
-
-Di bawah direktori blog, jalankan perintah berikut untuk masuk ke dalam mode interaktif pada piranti baris perintah:
-
-Kita akan melihat
-
-Pada prompt, masukkan dua perintah berikut untuk membuat kelas UserRecord dan PostRecord:
-
-Di sini kita menggunakan format namespace lagi untuk menetapkan kelas yang dibuat. Path Application.database.UserRecord menunjukan bahwa kita ingin file kelas UserRecord menjadi protected/database/UserRecord.php.
-
-Kita akan melihat struktur direktori berikut dengan dua file baru di bawah protected/database:
-
-Jika kita memeriksa file kelas PostRecord, kita akan melihat konten berikut.
-
-Seperti kita lihat, untuk setiap field dalam tabel posts, kelas mempunyai anggota data terkait. Konstan TABLE menetapkan nama tabel untuk PostRecord. Metode statis finder() membolehkan kita melakukan query dan mengambil data tulisan dalam batasan obyek PostRecord.
-
-Kita dapat menggunakan piranti baris perintah untuk melakukan beberapa pengujian dengan kelas Rekaman Aktif yang baru saja kita buat. Masih dalam mode interaktif pada piranti baris perintah, kita memasukan pernyataan PHP dan seharusnya melihat kode berikut. Para pembaca yang tertarik dapat mencoba pernyataan PHP laninnya, seperti misalnya UserRecord::finder()->findAll().
-
-Mengingat bahwa ada hubungan kunci asing antara tabel users dan posts. Diagram hubungan-entitas ditampilkan di bawah ini demi kenyamanan.
-
-Dari diagram hubungan-entitas di atas, kita merlihat bahwa tabel posts berisi field bernama author_id. Field author_id ini adalah kunci asing yang mereferensi tabel users. Dalam keadaan tertentu, nilai dalam field author_id seharusnya dari tabel users field username. Salah satu konsekuensi dari hubungan ini, dalam pola pikir obyek, adalah bahwa setiap "tulisan" milik "author" dan satu "author" dapat memiliki banyak "tulisan".
-
-Kita dapat membuat model hubungan antara tabel posts dan users dalam Rekaman Aktif dengan memodifikasi kelas PostRecord dan UserRecord seperti berikut.
-
-Properti statis $RELATIONS pada PostRecord mendefinisikan bahwa properti $author dimiliki UserRecord. Dalam array(self::BELONGS_TO, 'UserRecord'), elemen pertama mendefinisikan tipe hubungan, dalam hal ini self::BELONGS_TO. Elemen kedua adalah nama pada rekaman terkait, dalam hal ini UserRecord. UserRecord didefinisikan sama di bawah ini, perbedaannya yaitu rekaman pengguna mempunyai banyak PostRecord.
-
-Sebuah array UserRecord dengan dan tulisan terkaitnya dapat diambil seperti berikut.
-
-Dokumentasi lengkap selanjutnya dapat ditemukan dalam dokumen quickstart Rekaman Aktif.
-
-Banyak aplikasi Web menggunakan database untuk memelihara datanya. Sistem blog kita tidak terkecuali. Dalam bagian ini, kami akan menjelaskan bagaimana untuk menulis halaman kendali-database untuk sistem blog kita. Kita akan menggunakan teknik termasuk database access object (DAO) dan Rekaman Aktif.
-
-Untuk keperluan tutorial, kita menyederhanakan kebutuhan sistem blog kita agar hanya perlu berhadapan dengan pengguna dan data tulisan. Selanjutnya kita membuat dua tabel database, users dan posts, seperti diperlihatkan dalam duagram hubungan entitas atau entity-relationship (ER) di bawah ini.
-
-Kita menggunakan SQLite 3 database untuk menyimpan data kita. Pertama kita ubah diagram ER ke dalam pernyataan SQL berikut dan menyimpannya dalam file protected/schema.sql.
-
-Kemudian kita menggunakan piranti baris perintah SQLite untuk membuat SQLite database. Kita membuat sebuah direktori protected/data untuk menampung file database SQLite. Sekarang kita menjalankan perintah berikut di bawah direktori protected/data:
-
-Database sudah dibuat sebagai protected/data/blog.db dan kita akan melihat direktori dan file berikut:
-Connexion à la base
-
-
-Création des classes Active Record
-
-Relations entre Posts et Users
-Création de la base
-<
-Melakukan Koneksi DB
-
-Membuat Kelas Rekaman Aktif
-
-Hubungan Antara Tulisan dan Pengguna
-Membuat Database
-
-