Есть информационная система (документооборот).
В ней список документов, которые могут менять статус (на согласовании, на доработке, закрыт и т.д.).
Статус меняется, когда пользователь с определенной ролью выполняет соответствующую операцию.
Например, нажимает автор документа "опубликовать" и документ меняет статус с "на доработке" на "на согласовании".
Есть нюансы:
1. есть согласующие в документе (например, инициатор, куратор) со связью manyToOne (у документа лишь один инициатор, автор, куратор...)
2. есть согласующие со связью manyToMany (любой юзер с ролью юрист может согласовать документ). Если
хотя бы один юрист согласовал, документ переходит на следующую стадию
3. есть согласующие со связью manyToMany (в одном документе много исполнителей).
Только если все исполнители согласовали, документ переходит на следующую стадию.
Как было раньше у нас реализовано:
одиночные роли хранились прямо в таблице document (initiator_id, curator_id, author_id):
согласующие manyToMany (см. пункт 2), которые по ролям, хранились в отдельной таблице agreements:
при этом изначально поле
user_id=null, как только кто-то с ролью role_id согласовывал документ, в user_id проставлялся его айдишник, state проставлялся в 1 и документ уходил дальше
согласующие manyToMany (см. пункт 3) хранились в отдельных таблицах, соответствующих отдельной роли, например, executors:
при этом, у всех узеров из списка исполнителя state=0 по умолчанию. Как только у всех state становилось 1, документ переводился на следующую стадию
Потом, потребовалось всё переписать на Symfony. И стал я думать, как правильно организовать хранение согласующих, с точки зрения Doctrine. Старый подход тут был уже неуместен. По-началу создал такую схему:
Тут одиночных согласующих храню также в документе, Согласующих из пункта 3 в таблице
doc_signers
С согласующими по ролям (пункт 2 ) пока не знаю что делать.
Помогите грамотно организовать сущности. Если есть уже какая-то методология решения таких задач (я лично не нашел), киньте ссылку.
Спасибо!
UPD в разрезе Symfony+Doctrine более корректно будет говорить о структуре сущностей и связях между Entities