SoftDelete, переопределение find() и работа hasOne() со всеми записями?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
za4me
Сообщения: 152
Зарегистрирован: 2016.06.26, 15:29
Контактная информация:

SoftDelete, переопределение find() и работа hasOne() со всеми записями?

Сообщение za4me » 2017.05.10, 16:38

Добрый день.

Подскажите, пожалуйста, как лучше всего решить данный вопрос.

Использую yii2tech/ar-softdelete, создал родительскую модель SoftDelete и переопределил в ней метод find():

Код: Выделить всё

public static function find()
{
    return parent::find()->where([self::$isDeletedAttribute => false]);
}
Теперь при наследовании этой модели в GridView не отображаются "удаленные" записи.

Но, бывает что для какого-то поля установлена связь fk, hasOne(). hasOne() использует find() класса и если поле ссылается на "удаленную" строку я получаю NULL вместо имени при:

Код: Выделить всё

// getTariffs() {hasOne}
'value' => $model->tariffs->name,
А мне необходимо что-бы я мог ссылаться и получать информацию и из "удаленных" строк.

Всем спасибо за советы.

Аватара пользователя
Alexum
Сообщения: 669
Зарегистрирован: 2016.09.26, 10:00

Re: SoftDelete, переопределение find() и работа hasOne() со всеми записями?

Сообщение Alexum » 2017.05.11, 09:16

Если вы не удаляете связи, то переопределять find() не стоит. Создайте дополнительный метод в модели. При формировании провайдера для GridVIew используйте его вместо find(), получите табличку без "архивных" записей.

Код: Выделить всё

public static function findWithoutDel()
{
    return parent::find()->andWhere([self::$isDeletedAttribute => false]);
}

Ответить