Jan
18

Définir une base de données pour notre application Yii

Nous nous retrouvons pour le quatrième épisode de la série Apprendre le Framework Yii, traduction française de l’article de Larry Ullman Defining Databases for the Yii Application, que vous pouvez retrouver sur le site www.LarryUllman.com.

Après avoir vu dans un premier article comment télécharger et installer le framework, créé une application basique dans le deuxième article, puis étudié la configuration de cette application dans un troisième épisode, nous allons voir dans cet article comment concevoir la base de données qui servira de fondations à notre application. Cet application d’exemple est une gestion sommaire d’employés et de services, chaque employé n’appartenant qu’à un service. Cet article suppose que vous disposiez d’une application Yii, que vous aurez probablement créée en suivant les articles précédents.

Le but de cette application est de créer une application Web qui vous permettra de créer, modifier, afficher et supprimer les services et les employés d’une entreprise fictive. Ces quatre opérations sont aussi appelées CRUD : Create (INSERT en SQL), Retrieve[1] (SELECT), Update et Delete. Ces quatre actions constituent la pierre angulaire de tout gestionnaire de contenu, ou d’un quelconque entrepôt de données. Pour créer cette application, il vous faudra créer un ensemble de fichiers pour les employés ainsi que pour les services :

  • Un fichier Modèle, qui décrit la chose elle-même[2]
  • Un fichier Contrôleur, qui définit les actions qui peuvent être mises en œuvre par cette chose
  • Plusieurs fichiers Vue, qui constituent l’interface utilisateur, et qui incluent par exemple les formulaires permettant de créer ou de mettre à jour les éléments

Avec certains frameworks, tout ceci requiert une certaine somme de travail : sélectionner le template, copier, coller, éditer ou créer de nouveaux fichiers, … Avec Yii, comme avec d’autres frameworks tels que Ruby on Rails, l’essentiel du travail est effectuée par vous en préparant correctement votre application et en utilisant les outils inclus dans le framework. Pour commencer, donc, je vais devoir me pencher sur les Modèles, qui seront représentés par des tables de base de données dans cet exemple.

Les deux tables seront assez simples, avec une relation de type ‘un à plusieurs’ entre elles : il y aura plusieurs employés dans un service, mais un seul service par employé. Vous pouvez créer votre table employés comme vous le souhaitez, mais dans le cadre de cette série « Apprendre Yii Framework », elle sera définie comme suit :

CREATE TABLE Employee (
id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
departmentId TINYINT UNSIGNED NOT NULL
COMMENT "CONSTRAINT FOREIGN KEY (departmentId) REFERENCES Department(id)",
firstName VARCHAR(20) NOT NULL,
lastName VARCHAR(40) NOT NULL,
email VARCHAR(60) NOT NULL,
ext SMALLINT UNSIGNED NULL,
hireDate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
leaveDate DATETIME NULL,
INDEX name (lastName, firstName),
INDEX (departmentId)
)

Dans un article sur le MVC[3], j’ai abordé la question des conventions et le fait qu’il est bon de se tenir aux exigences des règles du framework. Par exemple, j’utilise en principe uniquement des lettres minuscules et des underscores pour les noms de colonnes (comme first_name), mais j’utilise le camelCase ici pour me conformer aux standards de Yii et de la POO[4] (quand nous accèderons aux données d’un employé spécifique, les colonnes seront référencées en utilisant, par exemple, $model->firstName). De même, la clé primaire sera toujours nommée id. La colonne departmentId sera la clé étrangère référençant la table des services (department), pour indiquer à quel service est rattaché un employé. Je traiterai le commentaire un peu plus bas dans cet article. Le champ ext est destiné à représenter l’indicatif téléphonique d’un employé (essentiellement dans le but de montrer l’utilisation de contraintes numériques dans le Modèle). Le champ hireDate est renseigné lorsqu’un enregistrement est inséré dans la base (si aucune date n’est fournie pour ce champ). Notez que j’utilise ici MySQL et que le comportement des timestamps change d’une version à une autre. Il y a également un index sur la colonne name dans le but d’optimiser les tris, ainsi qu’un autre sur le champ departmentId, car il sera utilisé dans le cadre des jointure.

La table department ne contient que deux colonnes. Le premier est la clé primaire et le second le nom du service (avec un index de type unique sur cette colonne).

CREATE TABLE Department (
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40),
UNIQUE (name)
)

Maintenant, revenons sur le commentaire dans la définition de la table Employee… Yii identifiera les clés étrangères définies et s’aidera de ces informations pour définir le Modèle. Cependant, MySQL ne gère pas toujours le respect des clés étrangères (en fonction de la version de MySQL ainsi que du moteur de base de données utilisé[5]). Vous pourrez indiquer à Yii l’existance de cette contrainte de clé étrangère en commentaire comme celui que nous avons associé à la colonne Employee.departmentId. Ce commentaire précise que la colonne departmentId est une clé étrangère qui référence le champ Id de la table Department. Si vous n’ajoutez pas ce commentaire, ce n’est pas dramatique puisque vous pourrez modifier vous-même le code dans le modèle correspondant à la table. Cependant, il est appréciable de voir que Yii peut le faire pour vous.

Voilà, c’est tout. Vous avez créé deux tables et vous pouvez revenir aux outils de Yii qui vous permettrons de créer les Modèles, les Contrôleurs et les Vues (ce que nous verrons dans le prochain article de cette série). Avant de passer à l’étape suivante, vérifiez la structure de vos tables dans la base de données afin de vérifier qu’elles correspondent bien à ce que vous souhaitez. En effet, Yii génèrera automatiquement du code (Modèles, Vues et Contrôleurs) ; si vous modifiez la structure de la base de données après que Yii aura généré ce code, vous devrez venir modifier manuellement le contenu des fichiers ainsi générés. Faites donc les choses le mieux possible avant cette phase de génération.

Fin de la traduction. Et hop ! Cela fait un article de plus de la très bonne série « Learning the Yii Framework » de Larry Ullman dont je termine la traduction. Nous vous remercions comme d’habitude de l’intérêt que vous portez à ces articles et nous espérons contribuer à la popularité de ce bel outil qu’est Yii.

Je vous rappelle que vous pouvez consulter la version originale en anglais de cet article sur le site de l’auteur.

Chapitre suivant : Créer les Modèles, les Vues et les Contrôleurs dans Yii »

  1. [1] NDT : le R peut aussi correspondre à Read
  2. [2] NDT : la « chose » sera donc ici soit l’employé, soit le service
  3. [3] NDT : Pour l’instant, je n’envisage pas de traduire cet article, mais si cela intéresse quelqu’un, faites-le moi savoir.
  4. [4] NDT : Programmation Orientée Objet
  5. [5] NDT : Si vous voulez en savoir davantage à ce sujet, recherchez la différence entre les moteurs MyIsam et InnoDb dans MySQL


6 Comments to “Définir une base de données pour notre application Yii”

  • More of “Learning the Yii Framework” Series in French – Larry Ullman 23 janvier 2011 à 4 h 17 min

    […] has recently posted the translated versions of two more parts in the series. The fourth part is Defining Databases for the Yii Application. The fifth part is Creating Models, Views, and Controllers in Yii. My thanks again to Nico for the […]

  • franklinovic 7 avril 2011 à 14 h 45 min

    Génial!! Merci bien

  • buba 1 août 2013 à 20 h 39 min

    J’aimerais que vous traduisiez les arcticles sur Understanding MVC

  • ABDELAZIZ AKHARRAZ 5 mars 2014 à 9 h 31 min

    Merci bcp (y)

  • Eric 30 avril 2014 à 17 h 15 min

    Pourriez vous m’éclairer svp?
    Vous dites de définir la base de données comme suit:
    « CREATE TABLE Employee (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ……
    INDEX name (lastName, firstName),
    INDEX (departmentId)
    ) »
    Mais ou dois je la créer car je suis nouveau avec yii et je galère un peu
    merci d’avance

  • Agoume koufana ingrid stephane 27 mai 2015 à 18 h 46 min

    merci bien pour ce tutoriel. je vais essayer ce code toute à l’heure

Poster un commentaire

Edito

Bienvenue sur Mémorandom.

Mémorandom est le blog de 2 développeurs web, Appo et Nico.

Vous y trouverez des informations sur différents domaines touchant de près ou de loin au développement web

Tutoriels Yii Framework

Nos derniers articles

Blogs Dev

Liens

Étiquettes