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.

Original source