update delete before andwhere all activequery active yii2 query-builder

delete - yii2 ActiveQuery ''O ME GUSTA'' filtro



yii2 delete (1)

Tengo una tarea - agregar a la búsqueda de modelo de búsqueda por nombre completo. Nombre completo es primer nombre + apellido. Así que necesito construir una consulta como

WHERE first_name LIKE ''%var%'' OR last_name LIKE ''%var%''

La única forma en que podría hacerlo:

$query->andFilterWhere([ ''OR'', ''profiles.first_name LIKE "%'' . $this->userFullName . ''%" '', ''profiles.last_name LIKE "%'' . $this->userFullName . ''%"'' ]);

Pero no me gusta porque el% es inseguro. No sé cómo ... Creo que existe la manera de crear dicha consulta con el constructor activo yii2, y me gustaría obtener resultados como

$query->andFilterWhere([''LIKE'', ''profiles.first_name'', $this->userFullName]); $query->andFilterWhere([''OR LIKE'', ''profiles.last_name'', $this->userFullName]);

El problema está en la consulta Me gusta, podría usar la matriz como los valores con los que los atributos se combinarán, pero no puedo usar la matriz como lista de atributos con los que se comparará.

o

$subQuery1 = Profile::find()->Where([''LIKE'', ''profiles.first_name'', $this->userFullName]); $subQuery2 = Profile::find()->Where([''LIKE'', ''profiles.last_name'', $this->userFullName]); //i think its overloaded(3 queries insteadof 1 but still) and the final query $query->andFilterWhere([ ''OR'', $subQuery1, $subQuery2 ]);

¿Alguna idea de cómo construir consulta sin "%"?


Simplemente debe intentar:

$query->andFilterWhere([ ''or'', [''like'', ''profiles.first_name'', $this->userFullName], [''like'', ''profiles.last_name'', $this->userFullName], ]);

or : similar al operador and , excepto que los operandos se concatenan utilizando OR . Por ejemplo, [''or'', [''type'' => [7, 8, 9]], [''id'' => [1, 2, 3]] generará (type IN (7, 8, 9) OR (id IN (1, 2, 3))) .

Lea más: http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where()-detail