有人能解释一下Yii 2 SearchModel
中的search
方法是如何工作的吗?我用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
时使用什么属性,我总是得到相同的结果--即表中的所有条目。
任何帮助都将不胜感激。谢谢。
3条答案
按热度按时间cunj1qz11#
search()
函数使用ActiveRecord::load()
设置搜索参数:load()
会从模型的formName()
方法(您可以覆写)取得'FormName'
,除非已指定$formName
参数。如果表单名称是空的,load()
会将整个$data
填入模型,而不是$data['FormName']
。因此,您应该尝试:
或者
当然,在
search()
函数中的att3
属性上添加一个条件:但是如果你真的想使用
$myModels = $search->search(['att3' => '3']);
,那么你应该简单地用$this->load($params, '')
替换$this->load($params)
。i7uaboj42#
如果你想把一些额外的参数传递给search()方法,你可以在SomeSearch.php中这样修改search方法:
和内部控制器:
jdgnovmf3#