Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
инвентаризация:dev:model:history [2024/01/15 07:32] admin [Инвентаризация: DEV: Model History] |
инвентаризация:dev:model:history [2025/05/15 12:26] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | {{tag> | + | {{tag> |
====== Инвентаризация: | ====== Инвентаризация: | ||
Как нам вести историю изменения моделей. | Как нам вести историю изменения моделей. | ||
+ | ++++ Первоначальная задумка | | ||
заводим таблицу, | заводим таблицу, | ||
* содержит те же поля что и исходная таблица | * содержит те же поля что и исходная таблица | ||
Строка 19: | Строка 20: | ||
* функцию журналирования состояния с возможностью указания инициатора изменений | * функцию журналирования состояния с возможностью указания инициатора изменений | ||
- | === Кандидаты на аудит === | + | Для возможности отображения загруженного из журнала объекта через те же формы, журнальный объект |
- | * Сервисы (важный узел, нужно | + | ++++ |
- | * Документы - видеть кто косячит при | + | |
- | * Оборудование - косяки при заведении | + | |
- | * Модели оборудования - косяки при заведении | + | |
+ | ++++ Кандидаты на аудит | | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ====== Как добавить историю модели ====== | ||
+ | ===== Таблицы ===== | ||
+ | В самой модели должны быть поля | ||
+ | * updated_at (timestamp()) - время обновления модели | ||
+ | * updated_by (string(32)) - логин обновившего (т.к. логин может скакать между пользователями, | ||
+ | <code php> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | </ | ||
+ | |||
+ | Создаем таблицу для модели истории | ||
+ | Там должны быть поля | ||
+ | * master_id (integer()) - ссылка на оригинальную модель **+ индекс** | ||
+ | * updated_at (timestamp()) - отметка о времени записи изменения **+ индекс** | ||
+ | * updated_by (string(32)) - логин изменившего **+ индекс** | ||
+ | * (опционально) updated_comment (string()) - можно комментировать каждое изменение | ||
+ | * changed_attributes (text()) - список полей изменившихся относительно прошлой записи (через запятую) | ||
+ | |||
+ | Все поля оригинальной модели нужно также добавить в том же виде (если не добавить, | ||
+ | Также (если) нужно добавить поля для many-2-many и обратных ссылок в виде (text()) полей. Туда будут складываться ID объектов связанных с моделью. | ||
+ | Например: | ||
+ | * users_ids (text()) | ||
+ | * comps_ids (text()) | ||
+ | |||
+ | <code php> | ||
+ | $this-> | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ]); | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | </ | ||
+ | |||
+ | ===== Модели ===== | ||
+ | ==== Исходная ==== | ||
+ | Должна наследоваться от ArmsModel, тогда в процессе afterSave будет проверяться наличие класса истории, | ||
+ | |||
+ | === Атрибуты Ссылки === | ||
+ | надо, чтобы в оригинальной модели были доступны атрибуты с ID объектов с many-2-many и one-2-many обратными ссылками. Если это many-2-many ссылки, | ||
+ | <code php> | ||
+ | /** | ||
+ | * В списке поведений прикручиваем many-to-many ссылки | ||
+ | * @return array | ||
+ | */ | ||
+ | public function behaviors() | ||
+ | { | ||
+ | return [ | ||
+ | [ | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ] | ||
+ | ] | ||
+ | ]; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | === Атрибут Name === | ||
+ | Должен быть, если ссылки на этот объект есть в истории других объектов | ||
+ | сойдет даже вычисляемый getName() |