Как отслеживать изменения в Eventlistener и записывать их в БД?

Я пытаюсь отслеживать, что происходит в моем приложении. Для этого я создал этот класс:

class ChangeLogListener implements EventSubscriber
{
    private $tokenStorage;

    public function __construct(TokenStorage $tokenStorage)
    {
        $this->tokenStorage = $tokenStorage;
    }

    public function getSubscribedEvents()
    {
        return array(
            'postPersist',
            'postUpdate',
            'onDelete',
        );
    }

    public function postPersist(LifecycleEventArgs $args)
    {
        # Avoid to log the logging process
        if (!$args->getEntity() instanceof ChangeLog)

            $this->createLog($args, 'creation');
    }

    public function postUpdate(LifecycleEventArgs $args)
    {

        $this->createLog($args, 'update');
    }

    public function preRemove(LifecycleEventArgs $args)
    {
        # Handle the log creation
        $this->createLog($args, 'remove');
    }

    public function createLog(LifecycleEventArgs $args, $action)
    {
        $em = $args->getEntityManager();
        $uow = $em->getUnitOfWork();
        $entity = $args->getEntity();

        $user = $this->tokenStorage->getToken()->getUser();

        $changes[] = $uow->getEntityChangeSet($entity);

        $cl = new ChangeLog();
        $cl->setDate(new \DateTime());
        $cl->setUser($user);
        $cl->setEntityName(get_class($entity));
        $cl->setEntityId($entity->getId());
        $cl->setAction($action);
        $cl->setChangeset($changes);//<---change this 
        $cl->setDescription('');

        $em->persist($cl);
        $em->flush();
    }
}

Но у меня проблемы с изменениями, я не знаю, как правильно записать их в БД и сделать читабельными. Может есть какие-то способы сделать это правильно?
Когда я пытаюсь сбросить изменения, я всегда получаю сообщение об ошибке:

String data, right truncated: 1406 Data too long for column 'change_set' at row 1"

Мой ChangeLog.orm.yml:

#...
fields:
   changeSet:
         type: array
#... 
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
19
1

Ответы 1

Сделайте var_dump($changes);die(); после вашей линии getEntityChangeSet() и выясните, что вы действительно хотите от этого набора данных. В настоящее время он слишком длинный для поля, в котором вы его пытаетесь сохранить. Его необходимо уменьшить.

Другие вопросы по теме