У меня есть модель Team, она же таблица team
я хочу на уровне модели Team ограничить данные которые будут браться из таблицы,
просто для примера, например, ограничить выборку по одной из колонок, например, не выводить строки где будет колонка blocked установлено 1 (это чисто для примера, вместо блокед может быть что угодно)
поидее где-то в модели Team мне нужно прописать такое ограничение
но я не пойму
структура модели такая
функция tableName задает название таблицы,
функция rules задает правила заполненеия значений,
функция attributeLabels задает названия полей...
явно это делается не в этих функциях...
и где в модели ограничить список полей для загрузки их из БД не понимаю...
именно я хочу на уровне модели ограничить список данных, потому что в будущем эти данные буду таскать везде и везде прописывать ограничения не хочу
Model ограничение вывода данных на уровне модели
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
Re: Model ограничение вывода данных на уровне модели
Код: Выделить всё
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();
}
}
Последний раз редактировалось ElisDN 2019.08.22, 15:57, всего редактировалось 1 раз.
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
Re: Model ограничение вывода данных на уровне модели
Дмитрий вы написали все правельно. Но у меня появился вопрос: Не ограничит ли такая постановка, когда админу нужно будет снять какой то флаг с записи? Если подумать то любой кто бы не сделал запрос получит ТОЛЬКО активные связи так? и в этом случае лучше унаследоваться и переопределить эти методы в child моделе и дергать ее для всех юзеров, а основную модель оставить не тронутой. Правельно?ElisDN писал(а): ↑2019.08.22, 11:13илиКод: Выделить всё
class Team extends ActiveRecord { public static function find(): ActiveQuery { return parent::find()->where(['!=', 'blocked' => 1]); } }
https://www.yiiframework.com/doc/guide/ ... ry-classesКод: Выделить всё
class Team extends ActiveRecord { public static function find(): TeamQuery { return (new TeamQuery(get_called_class()))->active(); } }
Re: Model ограничение вывода данных на уровне модели
Админ можно добавить метод с $this->where(null), чтобы выводить все записи.leonenco писал(а): ↑2019.08.27, 02:32 Дмитрий вы написали все правельно. Но у меня появился вопрос: Не ограничит ли такая постановка, когда админу нужно будет снять какой то флаг с записи? Если подумать то любой кто бы не сделал запрос получит ТОЛЬКО активные связи так? и в этом случае лучше унаследоваться и переопределить эти методы в child моделе и дергать ее для всех юзеров, а основную модель оставить не тронутой. Правельно?