Générer des tables dynamiques avec Doctrine Symfony 4.4.3

Générer des tables dynamiques avec Doctrine Symfony 4.4.3 - PHP - Programmation

Marsh Posté le 22-03-2020 à 16:27:30    

Bonjour,
 
J'essaye via mon script de générer des tables dynamiquement avec Doctrine. En effet, j'ai une entité qui contient la liste de production (Production.php), lorsque je lance ma requête pour sélectionner la liste de productions, je récupère un champ (date_production) sous forme (mois_année => m_Y). Je me sert de ce champ comme alias pour créer mes nouvelles tables en fonction de la date de production. Par exemple : production_m_Y (production_03_2020). La création de mes tables se déroule bien, le problème que je rencontre est : quand je récupère deux dates différentes par exemple 02_2020 et 03_2020, mon script me crée une première table production_02_2020 et la deuxième table au lieu de me créer production_03_2020, il me crée production_02_2020_03_2020. Je galère à trouver une solution pour corriger ce problème. Merci pour votre aide !
 
Script ci-dessous :
 

Code :
  1. // script pour créer une table
  2. public function createTable($entity, $month_year)
  3. {   
  4.     $metaData = $this->em->getClassMetadata($entity); 
  5.     $metaData->setPrimaryTable(['name' => $metaData->getTableName() .'_'. $month_year]); 
  6.     $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->em); 
  7.     $schemaTool->createSchema([$metaData]);
  8. }


Code :
  1. $productions = $this-em->getRepository(Production::class)->findAll();
  2. foreach ($productions as $production) { 
  3.     $productionDate = $production['dateProduction'];
  4.     $date = $productionDate->format('m_Y');
  5.     if ($this->em->getConnection()->getSchemaManager()->tablesExist(['production_'  . $date]) === false) {         
  6.         $this->createTable(Production::class, $date);       
  7.     }
  8. }


Code :
  1. // L'entité Production
  2. namespace App\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. /**
  5. * Production  
  6. *
  7. * @ORM\Table(name="production" )
  8. * @ORM\Entity
  9. *
  10.  
  11. class Production  
  12. {
  13.  
  14. /**     
  15. * @var int
  16. *
  17. * @ORM\Column(name="id", type="integer", nullable=false)
  18. * @ORM\Id
  19. * @ORM\GeneratedValue(strategy="IDENTITY" )
  20. */ 
  21. private $id;   
  22. /**
  23. * @var string
  24. *
  25. * @ORM\Column(name="name", type="string", length=2, nullable=false)     
  26. */
  27. private $name;   
  28. /**
  29. * @var datetime     
  30. *
  31. * @ORM\Column(name="date_production", type="datetime", nullable=false)     
  32. */
  33. private $dateProduction;
  34. // ........... getters and setters
  35. }

Reply

Marsh Posté le 22-03-2020 à 16:27:30   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed