SoftDelete, отношения и SonataORMAdminBundle

Я использую SonataAdminBundle - точнее, SonataORMAdminBundle с Doctrine - для выполнения некоторых моих задач. До сих пор это оказался действительно полезный пакет, однако осмысленное удаление сущностей несколько сложно.

Предположим, что у сущности Tour есть сущность Truck и Trailer, но когда отбрасывается Truck, она больше не должна появляться в общем приложении администратора. Тем не менее, все еще могут существовать устаревшие туристические объекты, связанные с этим Грузовиком.

Так что неясно, как решить эту проблему, когда пользователь может отредактировать такой устаревший Тур в админке, выбор сущности пропал?

Я взглянул на комплекты расширения SoftDelete, но, похоже, предстоит много работы по настройке всех конкретных случаев.

Есть ли простой подход на уровне пакета или в доктрине в целом для решения подобных проблем?

1 ответ

Решение

Способ, которым это поведение реализуется при необходимости в наборе Sonata, - через новое логическое поле в объекте: "включен". Затем мы добавляем фильтр, чтобы отобразить его или нет, и фактически никогда не удаляем объект при использовании. Софт-удаление, являющееся специфической для клиента операцией (у вас могут быть выделенные бизнес-правила вместе с ней), мы не реализовали ее изначально в наборе Sonata. Ваша реализация должна зависеть от ваших потребностей в этом случае.

Однако мы интегрировали EntityAuditBundle из Simplethings ( https://github.com/simplethings/EntityAudit) в SonataDoctrineORMAdminBundle: каждый объект, имеющий класс Admin, проверяется автоматически. Это позволяет отслеживать каждое редактирование, выполненное на проверяемых объектах. (Не обязательно то, что вы ищете, но, тем не менее, может быть интересным).

Наконец, как вы упомянули, SoftDelete может помочь вам. Но вы можете иметь своих собственных слушателей событий (например, с помощью preRemove) и реализовать свое решение по-своему.

Если вы считаете, что ваше решение может стоить интеграции в SonataDoctrineORMAdminBundle, не стесняйтесь создавать проблемы на github, и мы обсудим это.

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