hostadmin
@hostadmin

Как лучше организовать версионность документов в yii2?

Необходимо сделать возможность "отката" документов в системе и просмотра версий изменений.
В приложении есть несколько сущностей (моделей и таблиц), у которых надо сохранять версии после редактирования (к примеру "новости" и "статьи").

Сейчас видится два варианта.
Первый - тупо делать в текущей таблицы копию записи и ставить у неё флаг типа notshow. Вариант простой, всё решается в пределах одной модели и контроллера, но не нравится то, что таблица будет сильно распухать от большого кол-ва версий. И всякие поиски будут тормозить (расчёт идёт на несколько миллионов "оригинальных" записей, т.е. с версиями это всё может увеличиться еще в десятки раз).

Второй - сделать вторую модель с таблицей, которые будут копировать почти весь функционал оригинальной модели, за исключением условного поля original_id, которое будет ссылать на запись в оригинальной таблице. В этом варианте не нравится куча кода, который будет дублировать код из оригинальной модели.
  • Вопрос задан
  • 400 просмотров
Решения вопроса 1
PrincessCelestia
@PrincessCelestia
Естественно надо делать вторую таблицу.

А новую модель наследовать от первой. Учите ООП и будет вам счастье.

Пример:

// Обычная модель для работе с обычной таблицей
class News extend ActiveRecord
{
public static function indexName()
{
return '{{%news}}';
}
}

// Модель для работы с архивами
class ArchiveNews extend News
{
public static function indexName()
{
return '{{%archive_news}}';
}
}

Естественно весь функционал модели News будет доступен и справедлив для ArchiveNews. Останется только где-то переписать / расширить некоторые методы для работы с новым полем 'original_id'.

В частности правила и лейблы.
Написано только что
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
В WordPress используется первый вариант.
Вполне себе рабочий и удобный.

Второй мне кажется сложнее + могут вылезти какие-то неудобства в процессе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы