php - instalar - Yii2 ¿cómo funciona search() en SearchModel?
yii2 español (1)
¿Alguien puede explicar cómo funciona el método de search
en un Yii2 SearchModel
? Lo generé usando Gii. Aquí 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;
}
Así es como lo llamo:
$search = new MyModelSearch();
$myModels = $search->search([''att3'' => ''3'']);
Independientemente de los atributos que uso en la search
llamadas, siempre obtengo el mismo resultado, es decir, todas las entradas de la tabla. Me falta algo aquí que simplemente no entiendo.
Cualquier ayuda sería realmente apreciada. Gracias.
La función search()
generada por Gii usa ActiveRecord::load()
para establecer los parámetros de búsqueda:
load()
obtiene el''FormName''
del métodoformName()
del modelo (que puede anular), a menos que se$formName
parámetro$formName
. Si el nombre del formulario está vacío,load()
rellena el modelo con todos los$data
, en lugar de$data[''FormName'']
.
Entonces deberías intentar:
$myModels = $search->search([''MyModelSearch''=>[''att3''=>3]]);
O
$myModels = $search->search([$search->formName()=>[''att3''=>3]]);
Y, por supuesto, agregue una condición en el atributo att3
en la función search()
:
$this->addCondition($query, ''att3'');
Pero si realmente desea usar $myModels = $search->search([''att3'' => ''3'']);
entonces simplemente debería reemplazar $this->load($params)
con $this->load($params, '''')
.