Как зарегистрировать сущность, у которой есть коллекции?

Я хочу регистрировать все изменения сущности. Я изучил расширение доктрины Loggable, предоставленное StofDoctrineExtensionsBundle.

У меня это работает для полей, которые хранят простые данные, например. строка и целые числа. Но мой объект также имеет отношение ManyToMany к другому объекту, например. Tags.

Я получаю эту ошибку:

InvalidMappingException: Cannot versioned [tags] as it is collection in object - Hn\AssetDbBundle\Entity\Asset

Есть ли способ зарегистрировать объект с его отношениями? Я не против перейти на другой пакет.


person k0pernikus    schedule 23.07.2014    source источник
comment
Вот связанная проблема на GitHub.   -  person A.L    schedule 06.01.2015


Ответы (1)


В настоящее время никакие пакеты/расширения не имеют этой функциональности из коробки. Одним из вариантов было бы реализовать это самостоятельно. Это можно сделать с помощью слушателей Doctrine. В частности, вам нужно прослушивать события postUpdate и postPersist — они происходят, когда сущность обновляется и создается, и сохраняют там ваши теги.

Другой вариант — избавиться от отношений ManyToMany. Для этого создайте промежуточный объект AssetTag, который будет иметь отношение OneToMany как к Asset, так и к Tag. После этого вы можете использовать EntityAudit расширение Doctrine, которое поддерживает этот тип отношений.

person Konstantin Pereiaslov    schedule 07.07.2015
comment
Обратите внимание, что Loggable также может обнаруживать создание промежуточного объекта. - person A.L; 31.03.2016