PHPackages                             nex-otaku/yii2-softdelete - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. nex-otaku/yii2-softdelete

ActiveYii2-extension[Database &amp; ORM](/categories/database)

nex-otaku/yii2-softdelete
=========================

SoftDelete for ActiveRecord.

1.0.0(8y ago)01441MITPHP

Since Jul 31Pushed 8y agoCompare

[ Source](https://github.com/Nex-Otaku/yii2-softdelete)[ Packagist](https://packagist.org/packages/nex-otaku/yii2-softdelete)[ RSS](/packages/nex-otaku-yii2-softdelete/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (4)Versions (2)Used By (1)

Soft Delete
===========

[](#soft-delete)

Реализация SoftDelete для моделей ActiveRecord в Yii2.

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

[](#зачем-это-нужно)

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

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

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

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

Установка
---------

[](#установка)

Лучше всего устанавливать через [Composer](http://getcomposer.org/download/).

Выполните

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

```

или же добавьте

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

```

в список "require" вашего файла `composer.json`.

Схема БД.
---------

[](#схема-бд)

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

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

[](#подключение-расширений)

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

Используются расширения:

1. SoftDeleteBehavior.
2. QueryScopeBehavior для отображения всех записей, кроме удалённых.
3. NotDeletedTrait, SoftDeleteBehavior (сконфигурированный под поле "deleted"), SoftDeleteTimestampBehavior, SoftDeleteBlameableBehavior.

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

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

[](#подключение-в-модели)

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

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

Пример.

```
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();

```

Каскадное удаление реализуется самостоятельно.

###  Health Score

28

—

LowBetter than 52% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3256d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/ca89988119804ba6356790354d587c09d4bca9e539760adb17f067009bdd4903?d=identicon)[Nex-Otaku](/maintainers/Nex-Otaku)

---

Top Contributors

[![Nex-Otaku](https://avatars.githubusercontent.com/u/2260071?v=4)](https://github.com/Nex-Otaku "Nex-Otaku (9 commits)")

---

Tags

yii2extensionsoft-delete

### Embed Badge

![Health badge](/badges/nex-otaku-yii2-softdelete/health.svg)

```
[![Health](https://phpackages.com/badges/nex-otaku-yii2-softdelete/health.svg)](https://phpackages.com/packages/nex-otaku-yii2-softdelete)
```

###  Alternatives

[johnitvn/yii2-ajaxcrud

Gii CRUD template for Single Page Ajax Administration for yii2

97213.6k16](/packages/johnitvn-yii2-ajaxcrud)[dmstr/yii2-migrate-command

Console Migration Command with multiple paths/aliases support

31297.1k6](/packages/dmstr-yii2-migrate-command)[dmstr/yii2-db

Database extensions

19642.9k6](/packages/dmstr-yii2-db)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
