Intereting Posts
Подготовленные отчеты и транзакции MySQLi Используя .htaccess, запретите пользователям доступ к каталогам ресурсов и тем самым разрешить доступ к ресурсам исходного кода Почему file_get_contents быстрее, чем memcache_get? цикл через несколько массивов и вставка в SQL PHP – доступ к первому индексу массива функции SimpleXML :: xpath Класс «MongoClient» не найден Загрузите файл на Google Диск с помощью токена доступа. Какая область проверки подлинности требуется? Регистрация действий пользователя в laravel laravel 4 artisan – как откат к определенному состоянию миграции? Создание PHP-кода (из токенов Parser) Зачем использовать многобайтовые строковые функции в PHP? Создание рекурсивной функции дерева деревьев PHP cURL POST возвращает 415 – Неподдерживаемый тип носителя проблема с загрузкой изображения в codeigniter 2.1.0 Данные из трех таблиц дублируются при использовании оператора JOIN

Yii2 Как работает поиск () в SearchModel?

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