Bonjour,
Dans mon backend easyadmin, j'ai une entité qui écoute et enregistrer les actions faitres sur les autres entités (création, modification, suppression) pour avoir un historique. J'y stocke le nom de l'entité, l'id de l'entité, la date de modification et l'utilisateur qui a fait la modification, les champs modifiés avec leurs valeurs avant et après modification. Elle s'appele EntityHistory pour la suite de mon explication
Comme j'ai plusieurs entités écoutés, je n'ai pas fait de relation entre chacune de ses entités avec EntityHistory, ce ne me semblait être une bonne pratique vu le nombre d'entités concernés. (mais j'ai peut-être tord)

Actuellement, j'ai fais une version simplifié sur une seule entité et av ec juste la date a récuperé mais lros de l'affichage de la page-index, j'ai la valeur "inaccessible" au lieu d'avoir une date.
Pourtant quand je fais des dumps a différents étapes, j'ai bien des dates qui sont récupérés, le problème semble être uniquement à l'affichage.

le code de mon champs Date dans mon CRUD

DateTimeField::new('lastModificationDate', 'Date de modification')
                ->setVirtual(true)
                ->formatValue(function ($value, $entity) {
                        $historyRepository = $this->entityManager->getRepository(EntityHistory::class);
                        $date= $entity->getLastModificationDate($historyRepository);
                        dump($date);
                        return $date;
                })

la focntion getLastModificationDate dans l'entité ou je veux afficher la date

    public function getLastModificationDate(EntityHistoryRepository $historyRepository): ?\DateTime
    {
        return $historyRepository->findLastModificationDate($this->getId());
    }

la fonction findLastModificationDate dans EntityHistoryRepository

public function findLastModificationDate(int $entityId): ?\DateTime
    {
        $result = $this->createQueryBuilder('e')
            ->select('e.dateAction')
            ->where('e.entityId = :entityId')
            ->setParameter('entityId', $entityId)
            ->orderBy('e.dateAction', 'DESC')
            ->setMaxResults(1)
            ->getQuery()
            ->getOneOrNullResult();

        return $result ? $result['dateAction'] : null;
    }

Ce que je veux

Je voudrais dans chaque Page_Index de chaque entité (hors EntityHistory) récupéré la dernière date de modification et l'utilisateur, si cela est possible sans avoir défini de relation entre les entités.

Ce que j'obtiens
Actuellement, j'ai fais une version simplifié sur une seule entité et av ec juste la date a récuperé mais lros de l'affichage de la page-index, j'ai la valeur "inaccessible" au lieu d'avoir une date.
Pourtant quand je fais des dumps a différents étapes, j'ai bien des dates qui sont récupérés, le problème semble être uniquement à l'affichage.

4 réponses


Salut, tu vérifies bien que le retour de ta méthode findLastModificationDate ne renvoie pas null ?

La méthode (en tout cas celle actuelle car je continue de chercher même si pour l'instant je fais autrement) retoune bien des dates qui sont dans le BDD. Et j'ai essayé aussi quand j'ai aucune valeur dans la BDD et dans ce cas cela affiche "aucun" au lieu de "inaccessible" pour les autres qui ont une date.

alexandre06 si tu veux m'ajouter sur discord, on pourra poster la soluce ici si on trouve :)

Salut Alex_13 et silentjmc, avez vous pu trouver une solution à l'ereur qui affiche "Inaccessible" à la place des dates ?
Je viens de tomber sur le meme problème avec mon code (symfo 7.1)
Le projet que je récupère a les dates enregistrées en bdd, format bigInt(20) , (je ne peux mofdifier la base)

J'ai tenté de faire la conversion dans une function à la fin de mon entité > meme problème.
J'ai tenté de remplacer DateTimeField par un textfield, CustomField, c'est le meme problème...
J'ai essayé de mettre le crud en setDateTimeFormat('medium', 'medium') , short, full, d/M/y ... >> Idem...

DateTimeField::new('message_timestamp_virtual', 'Date/Heure')
                ->setVirtual(true)   // je crée un champ virtuel qui n'est pas dans mon entité
                ->formatValue(function ($value, $entity) {
                    $rawTimestamp = $entity->getMessageTimestamp();
                    if ($rawTimestamp !== null && is_numeric($rawTimestamp)) {

                        $dateTime = new \DateTime();
                        $dateTime->setTimestamp($rawTimestamp/1000);
                        // dd($dateTime->format('d/M/y H:m:s'), $rawTimestamp);
                        return $dateTime->format('d/M/y H:m:s'); 
                    }
                    return null; // null si donnée invalide
                }) 

le dd() affiche bien la date comme j'aimerai l'avoir apparaitre dans EAdmin 4.20

1 in MessagesCrudController.php on line 78:
"07/Apr/24 17:04:31"

Lorsque je retire le dd(), il y a le message 'Inaccessible' qui apparait en rouge.

Il y a peut etre une incohérence entre le format souhaité par l'intl de DateTimeField et le formatage que j'effectue, mais je ne trouve pas de réponses pour le moment.

Merci d'avance ;)