Может кто-нибудь объяснить, как работает метод 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, '') .