Я работаю над проектом Symfony4 / Doctrine / MySQL со следующим требованием:
Пользователи могут создавать объекты (например, сообщения), которые будут видны в общедоступном интерфейсе только после утвержденияадминистратором
Когда пользователь редактирует свой пост после утверждения / публикации, измененный пост должен быть снова утвержден, прежде чем изменения станут видны во внешнем интерфейсе.Но пока ожидается утверждение, старая утвержденная версия сообщения должна оставаться видимой в веб-интерфейсе.
Это означает, что мне нужно сохранить две версии каждой сущности "Post": утвержденная версия длявеб-интерфейс и незавершенная версия для бэкэнда.
В прошлых проектах с аналогичными требованиями я пробовал разные подходы к этой проблеме:
Использование "Поведение с поддержкой версий"msgstr "(это было в дни Symfony1 / Propel с использованием sfPropelVersionableBehaviorPlugin).Для отображения во внешнем интерфейсе, если объект не был утвержден, мне приходилось извлекать предыдущие версии, пока не была найдена последняя утвержденная версия.
Используя вторую таблицу объекта / базы данных "ApprovedPost" сто же определение поля, что и у основного объекта "Post".Когда сообщение одобрено администратором, оно будет скопировано в таблицу ApprovedPost.Интерфейс работает только с таблицей ApprovedPost.
Какова наилучшая практика для реализации такого поведения?