H
H
hostadmin2017-01-08 18:14:21
Yii
hostadmin, 2017-01-08 18:14:21

What is the best way to organize document versioning in yii2?

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

Answer the question

In order to leave comments, you need to log in

2 answer(s)
P
Princess Celestia, 2017-09-13
@hostadmin

Naturally it is necessary to do the second table.
And a new model to inherit from the first. Learn OOP and you will be happy.
Example:
// Usual model for working with a normal table
class News extend ActiveRecord
{
public static function indexName()
{
return '{{%news}}';
}
}
// Model for working with archives
class ArchiveNews extend News
{
public static function indexName()
{
return '{{%archive_news}}';
}
}
Naturally, all functionality of the News model will be available and valid for ArchiveNews. It remains only to rewrite / expand some methods to work with the new 'original_id' field somewhere.
В частности правила и лейблы.
Написано только что

Александр Аксентьев, 2017-01-08
@Sanasol

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

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question