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 operadorand
, excepto que los operandos se concatenan utilizandoOR
. 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