====== 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; }