Yii2 how does search() in SearchModel work?
php, yii, yii2
Solution
The `search()` function generated by Gii use `ActiveRecord::load()` to set search parameters :
`load()` gets the `'FormName'` from the model's `formName()` method (which you may override), unless the `$formName` parameter is given. If the form name is empty, `load()` populates the model with the whole of `$data`, instead of `$data['FormName']`.
So you should try :
$myModels = $search->search(['MyModelSearch'=>['att3'=>3]]);
Or
$myModels = $search->search([$search->formName()=>['att3'=>3]]);
And of course add a condition on `att3` attribute in `search()` function :
$this->addCondition($query, 'att3');
But if you really want to use `$myModels = $search->search(['att3' => '3']);` then you should simply replace `$this->load($params)` with `$this->load($params, '')`.
Problem
Please can someone explain how the `search` method in a Yii2 `SearchModel` works? I generated it using Gii. Here it is: ``` 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; } ``` This is how I call it: ``` $search = new MyModelSearch(); $myModels = $search->search(['att3' => '3']); ``` Regardless of what attributes I use in calling `search`, I always get back the same result - i.e. all the entries in the table. I'm missing something here that I just do not understand. Any help would be really appreciated. Thanks.