Je cherche à actualiser l'Etat d'instance de Sortie de ma base de donnée périodiquement grâce au scheduler de symfony
classe executée par le scheduler:
#[AsCronTask('*/1 */1 * * *',timezone:"EUROPE/PARIS")]
final class Historiser
{
public function __construct (private EntityManagerInterface $entityManager) {
}
public function __invoke():string {
$em=$this->entityManager;
$sortieRepository=$em->getRepository(Sortie::class);
$etatHistorise=$em->getRepository(Etat::class)->findOneBy(['libelle'=>'Historisée']);
$sortiesAHistoriser=$sortieRepository->findSortiesAHistoriser();
foreach($sortiesAHistoriser as $sortie){
var_dump($sortie->getNom());
var_dump($sortie->getEtat()->getLibelle());
$sortie->setEtat($etatHistorise);
$em->persist($sortie);
}
$em->flush();
$sortiesAHistoriser=$sortieRepository->findSortiesAHistoriser();
foreach($sortiesAHistoriser as $sortie) {
var_dump($sortie->getNom());
var_dump($sortie->getEtat()->getLibelle());
}
return "ok";
}
}
Resultat de l'invite de commande:
12:26:00 INFO [messenger] Received message Symfony\Component\Scheduler\Messenger\ServiceCallMessage ["class" => "Symfony\Component\Scheduler\Messenger\ServiceCallMessage"]
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:27:
string(12) "A historiser"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:28:
string(7) "Passée"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:27:
string(21) "A historiser Annulée"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:28:
string(8) "Annulée"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:36:
string(12) "A historiser"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:37:
string(11) "Historisée"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:36:
string(21) "A historiser Annulée"
D:\wamp64\www\boomParty\src\Scheduler\Handler\Historiser.php:37:
string(11) "Historisée"
12:26:00 INFO [messenger] Message Symfony\Component\Scheduler\Messenger\ServiceCallMessage handled by Symfony\Component\Scheduler\Messenger\ServiceCallMessageHandler::__invoke ["class" => "Symfony\Component\Scheduler\Messenger\ServiceCallMessage","handler" => "Symfony\Component\Scheduler\Messenger\ServiceCallMessageHandler::__invoke"]
12:26:00 INFO [messenger] Symfony\Component\Scheduler\Messenger\ServiceCallMessage was handled successfully (acknowledging to transport). ["class" => "Symfony\Component\Scheduler\Messenger\ServiceCallMessage"]
Ce que je veux
L'Etat des sorties trouvées doit passer à "Historisée dans la base de données
Ce que j'obtiens
L'état des sorties est bien passé en "Historisée", cependant si je relance ma requête de recherche des éléments à Historiser, ces Sorties reviennent avec le bon état "Historisée" mais en base de donnée elle ne sont pas modifiées!
Comme si une copie virtuelle de la base de donnée était crée lors de l'utilisation du scheduler.
Je pensé à l'éventuele caractèristique Transactionnel de l'opération mais je ne reçoit aucune erreur. J'obient: "was handled successfully"