Model ограничение вывода данных на уровне модели

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
iamguruman
Сообщения: 237
Зарегистрирован: 2018.05.10, 08:26

Model ограничение вывода данных на уровне модели

Сообщение iamguruman »

У меня есть модель Team, она же таблица team

я хочу на уровне модели Team ограничить данные которые будут браться из таблицы,
просто для примера, например, ограничить выборку по одной из колонок, например, не выводить строки где будет колонка blocked установлено 1 (это чисто для примера, вместо блокед может быть что угодно)

поидее где-то в модели Team мне нужно прописать такое ограничение

но я не пойму

структура модели такая
функция tableName задает название таблицы,
функция rules задает правила заполненеия значений,
функция attributeLabels задает названия полей...

явно это делается не в этих функциях...
и где в модели ограничить список полей для загрузки их из БД не понимаю...

именно я хочу на уровне модели ограничить список данных, потому что в будущем эти данные буду таскать везде и везде прописывать ограничения не хочу
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Model ограничение вывода данных на уровне модели

Сообщение ElisDN »

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

class Team extends ActiveRecord
{ 
    public static function find(): ActiveQuery
    {
        return parent::find()->where(['!=', 'blocked' => 1]);
    }
}
или

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

class Team extends ActiveRecord
{ 
    public static function find(): TeamQuery
    {
        return (new TeamQuery(get_called_class()))->active();
    }
}
https://www.yiiframework.com/doc/guide/ ... ry-classes
Последний раз редактировалось ElisDN 2019.08.22, 15:57, всего редактировалось 1 раз.
Аватара пользователя
leonenco
Сообщения: 155
Зарегистрирован: 2017.01.30, 22:42

Re: Model ограничение вывода данных на уровне модели

Сообщение leonenco »

ElisDN писал(а): 2019.08.22, 11:13

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

class Team extends ActiveRecord
{ 
    public static function find(): ActiveQuery
    {
        return parent::find()->where(['!=', 'blocked' => 1]);
    }
}
или

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

class Team extends ActiveRecord
{ 
    public static function find(): TeamQuery
    {
        return (new TeamQuery(get_called_class()))->active();
    }
}
https://www.yiiframework.com/doc/guide/ ... ry-classes
Дмитрий вы написали все правельно. Но у меня появился вопрос: Не ограничит ли такая постановка, когда админу нужно будет снять какой то флаг с записи? Если подумать то любой кто бы не сделал запрос получит ТОЛЬКО активные связи так? и в этом случае лучше унаследоваться и переопределить эти методы в child моделе и дергать ее для всех юзеров, а основную модель оставить не тронутой. Правельно?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Model ограничение вывода данных на уровне модели

Сообщение ElisDN »

leonenco писал(а): 2019.08.27, 02:32 Дмитрий вы написали все правельно. Но у меня появился вопрос: Не ограничит ли такая постановка, когда админу нужно будет снять какой то флаг с записи? Если подумать то любой кто бы не сделал запрос получит ТОЛЬКО активные связи так? и в этом случае лучше унаследоваться и переопределить эти методы в child моделе и дергать ее для всех юзеров, а основную модель оставить не тронутой. Правельно?
Админ можно добавить метод с $this->where(null), чтобы выводить все записи.
Ответить