*/ class AuditTrailRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, AuditTrail::class); } /** * Persist an AuditTrail without storing it in the entity manager. */ public function persistImmediately(AuditTrail $auditTrail): void { $metadata = $this->getClassMetadata(); $sql = $this->getEntityManager()->getConnection()->createQueryBuilder(); $sql ->insert($metadata->getTableName()) ->values([ 'id' => ':id', 'action' => ':action', 'occurredat' => ':occured_at', 'user_id' => ':user_id', 'description' => ':description', 'targets' => ':targets', 'metadata' => ':metadata', ]) ->setParameter('id', $auditTrail->getId()) ->setParameter('action', $auditTrail->getAction()) ->setParameter('occured_at', $auditTrail->getOccurredAt(), Types::DATETIMETZ_IMMUTABLE) ->setParameter('user_id', null) ->setParameter('description', $auditTrail->getDescription()) ->setParameter('targets', $auditTrail->getTargets(), Types::JSON) ->setParameter('metadata', $auditTrail->getMetadata(), Types::JSON); if (null !== $user = $auditTrail->getUser()) { $sql->setParameter('user_id', $user->getId()); } $sql->executeQuery(); } }