serve instalar framework español ejemplos descargar advanced php yii yii2

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étodo formName() 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, '''') .