Bonjour j'ai un souci j'ai deux entités lié en OneToOne. soit A et B.
Mon entité A à une propriété date (private $date; en datetime)
Mon entité B à 5 propriétés date( private $date1, private $date2, private $date3, private $date4, private $date5 en datetime);

Lors de a persistence de l'entité A, je récupère la propriété date de mon entité A.

Et je dois ajouter un mois à chaque date des propriétés de l'entité A. c'est à dire
private $date1 => doit valoir un mois de plus par rapport à la private $date (de l'entité A)
private $date2 => doit valoir un mois de plus en fonction de la private $date1 de l'entité B
private $date3 => doit valoir un mois de plus en fonction de la private $date2 de l'entité B
private $date4 => doit valoir un mois de plus en fonction de la private $date3 de l'entité B
private $date5 => doit valoir un mois de plus en fonction de la private $date4 de l'entité B

j'ai fait :
$date = new DateTime();
$date1 = $date->add(new DateInterval('P1M'));
$date2 = $date1->add(new DateInterval('P1M'));
$date3 = $date2->add(new DateInterval('P1M'));
$date4 = $date3->add(new DateInterval('P1M'));
$date5 = $date4->add(new DateInterval('P1M'));

Mais bizarrement dans ma base de données Toutes les dates de l'entité B ont la meme valeur que le résultat de $date5
En faisant un var_dump(); je vois que les dates sont différentes mais en persistant toutes les date s de l'entité B ont la meme valeur que
le résultat de $date5

Pourriez vous m'aidez , s'il vous plait .

4 réponses


Lartak
Réponse acceptée

Bonjour.
As-tu essayé en clonant la variable que tu utilises ?
Par exemple :

$dateTime = new \DateTime();
$date = new \stdClass();
$date->one = $dateTime->add(new \DateInterval('P1M'));
$date->two = (clone $date->one)->add(new \DateInterval('P1M'));
$date->tree = (clone $date->two)->add(new \DateInterval('P1M'));
$date->four = (clone $date->tree)->add(new \DateInterval('P1M'));
$date->five = (clone $date->four)->add(new \DateInterval('P1M'));

Résultat ici.
Car de la manière que tu le fais, à chaque fois que tu utilises une variable précédente, tu l'as modifies au passage.
Alors qu'en en faisant un clone, tu n'en change pas sa valeur.

guilfred
Auteur
Réponse acceptée

Merci pour ton aide ça marche correctement mais juste une question et si je comprends bien c'est le résultat de $date->two qui est incrementé de 1 mois dans $date->tree ainsi de suite .

Lartak
Réponse acceptée

Oui tout à fait, c'est en gros la même chose que ce que tu faisais, mais en utilisant un clone d'une variable, on ne changes pas sa propre valeur de base, on ne fait qu'utiliser sa valeur/son objet.

guilfred
Auteur
Réponse acceptée

Super merci pour ton aide