gpt4 book ai didi

Yii2 ActiveQuery 'OR LIKE' 过滤器

转载 作者:行者123 更新时间:2023-12-03 03:38:30 25 4
gpt4 key购买 nike

我有一个任务 - 添加到按全名搜索的搜索模型。全名是名字+姓氏。所以我需要构建像

这样的查询
WHERE first_name LIKE '%var%' OR last_name LIKE '%var%'

我能做到的唯一方法:

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

但我不喜欢它,因为它不安全。我不知道怎么...我认为有一种方法可以使用 Yii2 事件构建器构建这样的查询,并且我想得到像这样的结果

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

问题出在查询中,例如,我可以使用数组作为要比较属性的值,但不能使用数组作为要比较的属性列表。

$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 instead of 1 but still) and the final query
$query->andFilterWhere([
'OR',
$subQuery1,
$subQuery2
]);

关于如何构建不带“%”的查询有什么想法吗?

最佳答案

你应该简单地尝试:

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

or: similar to the and operator except that the operands are concatenated using OR. For example, ['or', ['type' => [7, 8, 9]], ['id' => [1, 2, 3]] will generate (type IN (7, 8, 9) OR (id IN (1, 2, 3))).

了解更多:http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where()-detail

关于Yii2 ActiveQuery 'OR LIKE' 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28592805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com