Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| инвентаризация:dev:model:history [2024/02/26 04:12] – [Таблицы] admin | инвентаризация:dev:model:history [2025/05/15 12:26] (текущий) – admin | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | {{tag> | + | {{tag> |
| ====== Инвентаризация: | ====== Инвентаризация: | ||
| Как нам вести историю изменения моделей. | Как нам вести историю изменения моделей. | ||
| Строка 20: | Строка 20: | ||
| * функцию журналирования состояния с возможностью указания инициатора изменений | * функцию журналирования состояния с возможностью указания инициатора изменений | ||
| + | Для возможности отображения загруженного из журнала объекта через те же формы, журнальный объект должен мимикрировать под оригинал. Для этого целесообразно все вычисляемые параметры вынести в Trait и подключить трейты и к оригиналу и к журналу | ||
| ++++ | ++++ | ||
| Строка 31: | Строка 32: | ||
| ++++ | ++++ | ||
| - | ===== Как добавить историю модели ===== | + | ====== Как добавить историю модели |
| - | ==== Таблицы ==== | + | ===== Таблицы |
| В самой модели должны быть поля | В самой модели должны быть поля | ||
| * updated_at (timestamp()) - время обновления модели | * updated_at (timestamp()) - время обновления модели | ||
| Строка 43: | Строка 44: | ||
| Создаем таблицу для модели истории | Создаем таблицу для модели истории | ||
| Там должны быть поля | Там должны быть поля | ||
| - | * master_id (integer()) - ссылка на оригинальную модель | + | * master_id (integer()) - ссылка на оригинальную модель |
| - | * updated_at (timestamp()) - отметка о времени записи изменения | + | * updated_at (timestamp()) - отметка о времени записи изменения |
| - | * updated_by (string(32)) - логин изменившего | + | * updated_by (string(32)) - логин изменившего |
| * (опционально) updated_comment (string()) - можно комментировать каждое изменение | * (опционально) updated_comment (string()) - можно комментировать каждое изменение | ||
| * changed_attributes (text()) - список полей изменившихся относительно прошлой записи (через запятую) | * changed_attributes (text()) - список полей изменившихся относительно прошлой записи (через запятую) | ||
| Строка 72: | Строка 73: | ||
| ' | ' | ||
| ]); | ]); | ||
| + | $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() | ||