Yii2, Softdelete, self::tableName() и игнорирование `удаленных` записей

У меня есть базовый класс модели, который содержит поведение SoftDelete (cornernote/yii2-softdelete). При удалении записи столбец в таблице deleted_at заполнен меткой времени.

Попытка переопределить метод find () в base модель, но self::className() не возвращает префикс таблицы с именем.

return parent::find()->where([self::tableName() . '.deleted_at' => null]);

Я должен добавить его к каждому классу модели, чтобы получить правильное (полное) имя таблицы.

Вопрос: как лучше всего игнорировать записи в таблице с заполненным столбцом. Решение должно работать при обращении к модели для ActiveDataProvider([...]), find()->...one() и find()->...all().

ТИА

2 ответа

Решение

Вы должны прочитать это о поздних статических привязках:

http://php.net/manual/en/language.oop5.late-static-bindings.php

Поздние статические привязки вводят static ключевое слово, которое ссылается на класс, который был первоначально вызван во время выполнения

Итак, вы должны просто использовать static::tableName() вместо self::tableName(),

Я думаю, что вы должны использовать Customized Query Class

Он уже существует в библиотеке, что вы используете - здесь GitHub

Если вы хотите - вы также можете переопределить find метод.

Другие вопросы по тегам