====== Relations entre entités ======
Doc: [[https://symfony.com/doc/current/doctrine/associations.html]]
Dans cette exemple, une relation **OneToMany** existe entre les
entités **Category** et **Product**.
^ Entité ^ Sens de la relation ^ Explication ^
^ Category | **OneToMany** | **One** Category **To Many** Products |
^ Product | **ManyToOne** | **Many** Products **To One** Category |
===== Éléments de la relation =====
Doc: [[https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/association-mapping.html]]
==== Unidirectionel ou bidirectionel ? ====
La seule partie est est **obligatoire** c'est le **ManyToOne** dans la classe **Product**.
Le **OneToMany** dans la classe **Category** n'est utile que si on veut pouvoir récupérer
tous les produits depuis une catégorie.
Si on n'utilise pas ce côté de la relation, alors les **inversedBy** et **mappedBy**
sont inutiles.
===== Entité Category =====
namespace App\Entity;
class Category {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\OneToMany( targetEntity="App\Entity\Product",
* mappedBy="category")
*/
private $products;
}
===== Entité Product =====
namespace App\Entity;
class Product {
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\ManyToOne( targetEntity="App\Entity\Category",
* inversedBy="products")
*/
private $category;
}