Страница 1 из 1
Как изменить запрос поисковой модели?
Добавлено: 2019.04.26, 14:56
Kven
Всем здравствуйте! Помогите пожалуйста, есть таблица materials с множеством различных полей, в таблице есть такое поле path куда записывается имя загружаемого документа. Я начал делать отдельную страницу по таблице materials, но только с выводом тех материалов, в которых есть загруженный документ. На странице я вывожу данные в таблицу GridView, проблема у меня в том, что сейчас выводятся совершенно все материалы без условия присутствия документа, но как написать такое условие я не понимаю. Единственное что я смог сделать это в функции search указать какие необходимы поля, а вот как и где (в контроллере или в модели) прописать условие вывода только материалов с path, которое не равно null.
Код: Выделить всё
public function search($params)
{
$query = Materials::find();
$query->select(['doctype_id' ,'name', 'path']);
...
Re: Как изменить запрос поисковой модели?
Добавлено: 2019.04.26, 16:11
Usick
Здесь можно посмотреть
Фильтрация данных
Ну а если в двух словах: добавить 'path' в метод rules() search модели.
Условие вывода можно прописать в методе search(), если search модель используется только для этой страницы (иначе это условие будет применено ко всем остальным страницам где эта модель используется)
или в контроллере
Re: Как изменить запрос поисковой модели?
Добавлено: 2019.04.26, 17:07
Usick
Хотя в rules() не надо добавлять path, он от пользователя не приходит и вместо метода andFilterWhere() использовать where() или andWhere()
Re: Как изменить запрос поисковой модели?
Добавлено: 2019.04.26, 20:40
Dominus
Запрос будет получен без path = null
Код: Выделить всё
public function search($params)
{
$query = Materials::find();
$query->select(['doctype_id' ,'name', 'path']);
//...
$query->andWhere(['is not', 'path', null]);
//...
Но если надо только отфильтровать, то
Код: Выделить всё
public function search($params)
{
$query = Materials::find();
$query->select(['doctype_id' ,'name', 'path']);
//...
$dataProvider = new ActiveDataProvider([
'query' => $query,
//...
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere(['is not', 'path', null]);
//...
return $dataProvider;
}