Yiii2 comment search () fonctionne SearchModel?
s'il vous plaît quelqu'un peut expliquer comment le <!-Méthode dans un Yii2 SearchModel
fonctionne? Je l'ai générée en utilisant Gii. Ici, c'est:
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;
}
C'est comment je l'appelle:
$search = new MyModelSearch();
$myModels = $search->search(['att3' => '3']);
quels que soient les attributs que j'utilise pour appeler search
, j'obtiens toujours le même résultat - c'est à dire toutes les entrées dans la table. Je suis absent quelque chose ici que je ne comprends pas.
Toute aide serait vraiment appréciée. Grâce.
2 réponses
search()
fonction générée par Gii utiliser ActiveRecord::load()
pour définir les paramètres de recherche :
load()
devient'FormName'
à partir du modèleformName()
méthode (que vous pouvez annuler), à moins que le$formName
paramètre est donné. Si le nom du formulaire est vide,load()
remplit le modèle avec la totalité de$data
au lieu de$data['FormName']
.
alors vous devriez essayer :
$myModels = $search->search(['MyModelSearch'=>['att3'=>3]]);
Ou
$myModels = $search->search([$search->formName()=>['att3'=>3]]);
Et bien sûr d'ajouter une condition sur att3
l'attribut search()
fonction :
$this->addCondition($query, 'att3');
Mais si vous voulez vraiment utiliser $myModels = $search->search(['att3' => '3']);
alors vous devez simplement remplacer $this->load($params)
$this->load($params, '')
.
si vous voulez un param supplémentaire pour passer à la méthode search (), vous pouvez changer la méthode de recherche comme ceci dans SomeSearch.php:
public function search($params, $additional=0)
{
//...
if($additional==1) {
$query->andWhere(['status'=>['some', 'other']);
}
}
public function actionIndex()
{
$searchModel = new AdminSearch();
$additional=1;
$dataProvider = $searchModel->search(Yii::$app->request->queryParams, $additional);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}