2017 © Pedro Peláez
 

yii2-extension yii2-softdelete

SoftDelete for ActiveRecord.

image

nex-otaku/yii2-softdelete

SoftDelete for ActiveRecord.

  • Monday, July 31, 2017
  • by Nex-Otaku
  • Repository
  • 1 Watchers
  • 0 Stars
  • 26 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 2 Versions
  • 37 % Grown

The README.md

Soft Delete

Реализация SoftDelete для моделей ActiveRecord в Yii2., (*1)

Зачем это нужно

Суть работы SoftDelete (мягкого удаления) - вместо окончательного удаления записей из БД, в них просто меняется флаг (например, deleted=1). При выборке из БД мы опять же по этому флагу "отсеиваем" все удалённые записи, и получаем только актуальные., (*2)

Зачем это нужно, не проще ли сразу удалять навсегда?, (*3)

В более-менее сложных приложениях, есть статистика, отчёты и связанные данные. Например, покупатели делают заказы на сайте. Допустим, мы удалили покупателя, а вместе с ним и все его заказы. В результате мы не можем достоверно сказать, сколько у нас было заказов и на какую сумму за определённый период. В таких случаях помогает SoftDelete. По умолчанию мы игнорируем записи, отмеченные как удалённые, но при необходимости можем их учитывать и брать из них любую информацию., (*4)

Также, сохранение удалённых записей теоретически может пригодиться при отладке кода и восстановлении случайно удалённых данных. Но на практике это почти никогда не случается. Тем более, что для восстановления гораздо удобнее использовать регулярные бекапы. Поэтому, решив использовать SoftDelete, взвесьте все за и против. Возможно, в вашем проекте он не принесёт пользы, а будет только мешать., (*5)

Установка

Лучше всего устанавливать через Composer., (*6)

Выполните, (*7)

php composer.phar require --prefer-dist nex-otaku/yii2-softdelete "*"

или же добавьте, (*8)

"nex-otaku/yii2-softdelete": "*"

в список "require" вашего файла composer.json., (*9)

Схема БД.

В таблицах, добавляем поле "deleted": TINYINT(1) NOT NULL DEFAULT '1'. Для всех внешних ключей таблицы устанавливаем режим ON DELETE RESTRICT. Это частично защитит нас от случайного "жёсткого" удаления записей., (*10)

Подключение расширений.

Расширения подгружаются автоматически, через зависимости композера., (*11)

Используются расширения:, (*12)

  1. SoftDeleteBehavior. https://github.com/yii2tech/ar-softdelete, (*13)

  2. QueryScopeBehavior для отображения всех записей, кроме удалённых. https://github.com/mdmsoft/yii2-ar-behaviors, (*14)

  3. NotDeletedTrait, SoftDeleteBehavior (сконфигурированный под поле "deleted"), SoftDeleteTimestampBehavior, SoftDeleteBlameableBehavior. https://github.com/nex-otaku/yii2-softdelete, (*15)

Бихевиор QueryScopeBehavior подключается к ActiveQuery автоматически. Его нигде не нужно специально прописывать. Установили расширение и он уже сам в бутстрапе прилепился к ActiveQuery., (*16)

Подключение в модели.

В модели подключаем трейт NotDeletedTrait и бихевиор SoftDeleteBehavior. Если нам нужно знать, кто и когда удалил запись, подключаем SoftDeleteTimestampBehavior и SoftDeleteBlameableBehavior. Не забываем добавить соответствующие поля в таблице БД - "deleted_by", "deleted_at"., (*17)

Так как эти поля управляются автоматически и недоступны для редактирования пользователем напрямую, удаляем их из правил модели. См. метод "rules()"., (*18)

Пример., (*19)

class Feed extends \yii\db\ActiveRecord
{
    use \nex_otaku\softdelete\NotDeletedTrait;
    public function behaviors()
    {
        return [
            SoftDeleteBehavior::className(),
            SoftDeleteTimestampBehavior::className(),
            SoftDeleteBlameableBehavior::className(),
        ];
    }
}

Использование

// Удаление.
$model->safeDelete();

// Выборка записей, которые не были удалены.
$coolModels = CoolModel::find()->notDeleted()->all();

Каскадное удаление реализуется самостоятельно., (*20)

The Versions

31/07 2017

dev-master

9999999-dev

SoftDelete for ActiveRecord.

  Sources   Download

MIT

The Requires

 

by Nex Otaku

extension yii2 soft delete

31/07 2017

1.0.0

1.0.0.0

SoftDelete for ActiveRecord.

  Sources   Download

MIT

The Requires

 

by Nex Otaku

extension yii2 soft delete