8721 sujets

Développement web côté serveur, CMS

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 :


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


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


// L'entité Production
 
namespace App\Entity;
 
use Doctrine\ORM\Mapping as ORM;
 
/**
* Production 
*
* @ORM\Table(name="production")
* @ORM\Entity
*
 
class Production 
{
 
/**     
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/   
private $id;    
 
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=2, nullable=false)     
*/
private $name;    
 
/**
* @var datetime     
*
* @ORM\Column(name="date_production", type="datetime", nullable=false)     
*/
private $dateProduction;
 
// ........... getters and setters

}