Может кто-нибудь объяснить, как работает метод search
в Yii2 SearchModel
? Я сгенерировал его с помощью Gii. Вот:
public function search($params){ $query = MyModel::find(); $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $this->addCondition($query, 'att1'); $this->addCondition($query, 'att1', true); $this->addCondition($query, 'att2'); $this->addCondition($query, 'att2', true); return $dataProvider; }
Вот как я это называю:
$search = new MyModelSearch(); $myModels = $search->search(['att3' => '3']);
Независимо от того, какие атрибуты я использую при вызове search
, я всегда возвращаю тот же результат – то есть все записи в таблице. Мне что-то не хватает, что я просто не понимаю.
Любая помощь могла бы быть полезна. Благодарю.
Функция search()
сгенерированная Gii, использует ActiveRecord::load()
для установки параметров поиска:
load()
получает'FormName'
из методаformName()
модели (который вы можете переопределить), если не$formName
параметр$formName
. Если имя формы пуст,load()
заполняет модель целым$data['FormName']
$data
вместо$data['FormName']
.
Поэтому вы должны попробовать:
$myModels = $search->search(['MyModelSearch'=>['att3'=>3]]);
Или
$myModels = $search->search([$search->formName()=>['att3'=>3]]);
И, конечно, добавьте условие атрибута att3
в функцию search()
:
$this->addCondition($query, 'att3');
Но если вы действительно хотите использовать $myModels = $search->search(['att3' => '3']);
то вам следует просто заменить $this->load($params)
на $this->load($params, '')
.