Jusqu'à maintenant nous n'avons travaillé qu'avec une seule entité à la fois mais dans un cas réel on a souvent besoin de lier des données ensemble pour par exemple mettre en place un système de catégorie.
On commence par modifier l'entité sur laquelle on souhaite ajouter la relation.
php bin/console make:entity Recipe
Ensuite, on choisit le nom de la relation (ici category
) puis au niveau du type de données on met relation
. L'outil nous posera ensuite une série de question pour définir le type de relation et ses caractéristiques.
Au niveau de la gestion l'ORM fait abstraction de la relation et si vous souhaitez modifier des données croisées il vous suffit de manipuler des objets de manière traditionnelle.
// On attache une catégorie à une recette
$recipe->setCategory($category);
$em->flush();
// On peut aussi le faire dans le sens inverse
$category->addRecipe($recipe);
$em->flush();
// Si on veut la catégorie attaché à une recette
$recipe->getCategory();
Aussi on peut utiliser cette relation dans le query builder pour créer des jointures.
$this->createQueryBuilder('r')
->select('r', 'c')
->leftJoin('r.category', 'c')
->where('c.name = :category')
->setParameter('category', 'Plat chaud')
->getQuery()
->getResult();