<< TP 11
TP 13 >>

12. Lier équipement et véhicule





12.1. L'entité EquipementVehicule

Cette entité permet de faire le lien entre un équipement et un véhicule :

  • un véhicule peut être doté de plusieurs équipements
  • chaque équipement appraît avec différentes quantités sur différents véhicules

Les champs qui composent cette classe sont les suivants :

Notez les relations de l'ORM de type ManyToOne, InversedBy, JoinColumn, referencedColumnName :

  1. <?php
  2. namespace App\Entity;
  3.  
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7.  
  8. use App\Entity\Equipement;
  9. use App\Entity\Vehicule;
  10. use App\Repository\EquipementVehiculeRepository;
  11.  
  12. /**
  13.  * Classe qui fait le lien entre véhicules et équipements
  14.  */
  15. #[ORM\Entity(repositoryClass: EquipementVehiculeRepository::class)]
  16. class EquipementVehicule
  17. {
  18.     // identifiant
  19.     #[ORM\Id]
  20.    #[ORM\GeneratedValue]
  21.    #[ORM\Column(name: 'eqve_id', type: 'integer')]
  22.    private ?int $eqve_id = null;
  23.  
  24.     // équipement (ex: pneu neige, 100€)
  25.     #[ORM\ManyToOne(targetEntity: Equipement::class, inversedBy: "eq_equipement_vehicule")]
  26.    #[ORM\JoinColumn(nullable: false, name: "eqve_equipement_id", referencedColumnName: "eq_id")]
  27.    private ?Equipement $eqve_equipement = null;
  28.  
  29.     // véhicule (ex: Volkswagen, Touran)
  30.     #[ORM\ManyToOne(targetEntity: Vehicule::class, inversedBy: "ve_equipement_vehicule")]
  31.    #[ORM\JoinColumn(nullable: false, name: "eqve_vehicule_id", referencedColumnName: "ve_id")]
  32.    private ?Vehicule $eqve_vehicule = null;
  33.  
  34.     // nombre d'équipements dans le véhicule (ex: 4)
  35.     #[ORM\Column(name: "eqve_quantite", type: "integer")]
  36.    private ?int $eqve_quantite = null;
  37.  
  38.     function __construct() {
  39.  
  40.     }
  41.  
  42.     function getEqVeId() {
  43.         return $this->eqve_id;
  44.     }
  45.  
  46.     function getEqVeQuantite() {
  47.         return $this->eqve_quantite;
  48.     }
  49.  
  50.     function setEqVeQuantite($quantite) {
  51.         $this->eqve_quantite = $quantite;
  52.         return $this;
  53.     }
  54.  
  55.     function getEqVeEquipement() : Equipement{
  56.         return $this->eqve_equipement;
  57.     }
  58.  
  59.     function setEqVeEquipement($equipement) {
  60.         $this->eqve_equipement = $equipement;
  61.         return $this;
  62.     }
  63.  
  64.     function getEqVeVehicule() : Vehicule {
  65.         return $this->eqve_vehicule;
  66.     }
  67.  
  68.     function setEqVeVehicule($vehicule) {
  69.         $this->eqve_vehicule = $vehicule;
  70.         return $this;
  71.     }
  72.  
  73. }
  74.  
  75. ?>

12.2. Repository pour EquipementVehicule

Le Repository associé à cette classe possède le code suivant :

  1. <?php
  2. namespace App\Repository;
  3.  
  4. use App\Entity\EquipementVehicule;
  5. use App\Entity\Equipement;
  6. use App\Entity\Vehicule;
  7.  
  8. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  9. use Doctrine\Persistence\ManagerRegistry;
  10.  
  11. /**
  12.  * @extends ServiceEntityRepository<EquipementVehicule>
  13.  */
  14. class EquipementVehiculeRepository extends ServiceEntityRepository
  15. {
  16.     public function __construct(ManagerRegistry $registry)
  17.     {
  18.         parent::__construct($registry, EquipementVehicule::class);
  19.     }
  20.  
  21.    
  22.     public function save(Vehicule $vehicule, bool $flush = false): void
  23.     {
  24.         $this->getEntityManager()->persist($vehicule);
  25.  
  26.         if ($flush) {
  27.             $this->getEntityManager()->flush();
  28.         }
  29.     }
  30.    
  31. }
  32.  
  33. ?>





<< TP 11
TP 13 >>