有人可以解释一下searchYii2中的方法是如何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;
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的:
$search = new MyModelSearch();
$myModels = $search->search(['att3' => '3']);
Run Code Online (Sandbox Code Playgroud)
无论我在调用中使用什么属性search,我总是得到相同的结果 - 即表中的所有条目.我在这里遗漏了一些我不明白的东西.
任何帮助将非常感激.谢谢.
soj*_*oju 36
该search()所产生的功能GII使用ActiveRecord::load()设置的搜索参数:
load()得到'FormName'从模型的formName()方法(你可以重写),除非$formName指定参数.如果表单名称为空,load()则使用整个表单填充模型$data,而不是$data['FormName'].
所以你应该尝试:
$myModels = $search->search(['MyModelSearch'=>['att3'=>3]]);
Run Code Online (Sandbox Code Playgroud)
要么
$myModels = $search->search([$search->formName()=>['att3'=>3]]);
Run Code Online (Sandbox Code Playgroud)
当然att3在search()函数中添加一个条件:
$this->addCondition($query, 'att3');
Run Code Online (Sandbox Code Playgroud)
但是,如果你真的想使用$myModels = $search->search(['att3' => '3']);,那么你应该只需更换$this->load($params)用$this->load($params, '').
| 归档时间: |
|
| 查看次数: |
42974 次 |
| 最近记录: |