Zend – Le One To Many

Posted by on Août 7, 2012 in PHP, Zend | No Comments

La gestion des dépendances entre tables est un des outils les plus pratique des frameworks php, que ce soit Symfony ou Zend. Il y a plusieurs sorte de liens de dépendance entre des tables, mais dans ce court article je vais aborder le plus simple, le One to Many. Le One to Many est très utilisé, typiquement il permet de lier un auteur à plusieurs articles.

La base de données

Avant de parler du code php il faut mettre en place une base de données qui permette l’utilisation du One to Many. Ici nous n’avons besoin que de deux tables avec l’une d’elle contenant un attribut fessant référence à la clef primaire de l’autre table.

Par exemple une table Article ayant un attribut auteur_id qui soit une référence à la clef primaire id de la table Auteur.

La table Article est donc dépendante de la table Auteur.

Gestion des relations dans Zend

Déclaration

Après avoir crée la base de données, il faut faire comprendre à Zend la relation qu’il existe entre ces deux tables pour que le framework la gère automatiquement. Cela ce passe dans les fichiers DbTable/Article et DbTable/Auteur :

On commence par dire que la table Article est dépendante de la table Auteur via $_dependantTables puis dans la classe DbTable_Article, on spécifie les modalités de cette dépendance : columns est le nom de la colonne dépendante dans Article, refTableSlass est le nom de la classe de la table de dépendance (et pas le nom de la table), enfin refColums est le nom de la colonne de référence.

Utilisation

Maintenant  je vais vous montrer comment utiliser le framework Zend pour récupérer facilement l’auteur d’un article (sans écrire une ligne de SQL !). Il faut savoir qu’il est important d’avoir une méthode qui va récupérer uniquement les articles et une pour récupérer les articles et les auteurs. En effet, on utilisera les méthodes pour récupérer les articles avec leurs auteurs uniquement quand cela est pertinent.

Ici je vais partir du principe que vous avez déjà la fonction find  dans votre classe ArticleMapper, notre objectif et de créer la variation findAuteur.

La fonction findParentNomDeLaDbTable est une méthode magique qui va automatiquement faire une requête pour récupérer la ligne correspondante à la dépendance. Cette fonction n’est à utiliser que dans le cas d’une relation One to Many car elle va faire une requête  pour chaque ligne à récupérer.

Au niveau des objets php, j’ai également défini une variable auteur de type Auteur pour chaque article afin de lier correctement les deux classes.

Vous savez maintenant faire un One To Many avec Zend, pour plus d’information je vous pouvez aller voir la documentation Zend.