j'ai une tâche - ajouter au modèle de recherche en recherchant le nom complet. Le nom complet est le prénom + le nom de famille. J'ai donc besoin de construire une requête comme
WHERE first_name LIKE '%var%' OR last_name LIKE '%var%'
La seule façon de le faire:
$query->andFilterWhere([
'OR',
'profiles.first_name LIKE "%' . $this->userFullName . '%" ',
'profiles.last_name LIKE "%' . $this->userFullName . '%"'
]);
Mais je ne l'aime pas parce que% n'est pas sûr. Je ne sais pas comment ... Je pense qu'il existe un moyen de construire une telle requête avec yii2 active builder, et je voudrais obtenir un résultat smth comme
$query->andFilterWhere(['LIKE', 'profiles.first_name', $this->userFullName]);
$query->andFilterWhere(['OR LIKE', 'profiles.last_name', $this->userFullName]);
Le problème est dans la requête Comme, je pourrais utiliser le tableau comme valeurs d'attribut à comparer, mais je ne peux pas utiliser le tableau comme liste d'attributs à comparer.
ou
$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
]);
Des idées sur la façon de construire une requête sans "%"?
Vous devriez simplement essayer:
$query->andFilterWhere([
'or',
['like', 'profiles.first_name', $this->userFullName],
['like', 'profiles.last_name', $this->userFullName],
]);
or
: similaire à l'opérateurand
sauf que les opérandes sont concaténés à l'aide deOR
. Par exemple,['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]]
générera(type IN (7, 8, 9) OR (id IN (1, 2, 3)))
.
En savoir plus: http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where () -detail