У меня есть несколько моделей, история которых должна храниться бесконечно долго или, по крайней мере, очень долго. В приложении я бы отслеживал ежедневную статистику посещаемости людей в разных организациях и парочке других подобных объединений. Я понял, что никогда не смогу удалить пользователей из-за того, что пользователь не появляется в запросе на посещаемость в любое время до того, как указанный пользователь был удален. Проблема, с которой я столкнулся, заключается в том, чтобы найти хороший способ отслеживать старые ассоциации, а также запрашивать эти старые ассоциации.
Если у меня есть связующая таблица между пользователями и организациями, я могу просто добавить новую строку. с новыми ассоциациями между пользователем и организацией, к которой принадлежит пользователь, и запрашивать старые на основе даты, но у меня действительно нет элегантного способа сделать это, все просто кажется уродливым. Мне просто интересно, имел ли кто-нибудь дело с чем-то подобным раньше и, возможно, имел решение, которое они уже реализовали. Спасибо.
Ведение истории модельных ассоциаций
Ответы (3)
Создайте поле is_deleted, чтобы вы могли по-прежнему запрашивать этих «удаленных» пользователей, но измените свой код, чтобы они везде вели себя так, как если бы они были удалены. Тогда вам никогда не придется удалять строку и терять данные.
С точки зрения моделирования отношения выглядят как отношения между Работником и Работодателем, а именно Занятость. Это будет содержать ссылку как на Сотрудника, так и на Работодателя вместе с некоторым понятием TimePeriod (т. е. startDate и end Date). Если вы хотите запросить «активных» сотрудников, то все они имеют startDate ‹= Now() && endDate >= Now(), «уволенные» сотрудники имеют endDate ‹ Now() и т. д.
Я не могу сказать в вашем случае, каковы отношения между пользователями и организациями, и что заставляет отношения начинаться и заканчиваться, но, вероятно, существует концепция, подобная занятости, членству, регистрации или контракту. Когда вы говорите о ежедневной посещаемости, разве это не ежедневно в течение определенного периода времени? Период времени является основой для ваших запросов.
Надеюсь, это поможет,
Беррил.
Существует ряд плагинов, которые отслеживают версии моделей, включая их ассоциации. Взгляните на этот поиск для плагинов, связанных с редакцией.