我需要搜索出现在同一数据库字段中的几个关键字。例如,如果字段包含"快速的棕色狐狸跳过懒狗"有人搜索"快速"和#34;狗"这应该作为匹配返回。
所以我选择搜索字段并将其分解为基于空格的数组:
$terms = explode( " ", $this->search_term );
然后我想我会把它扔进一个循环中:
foreach ($terms as $key) {
$query->andFilterWhere( [
'or',
[ 'like', 'item.name', $key ],
] );
}
然而,这不起作用,而且它不是很优雅。
答案 0 :(得分:3)
你应该简单地构建条件参数,例如:
$condition = ['or'];
foreach ($terms as $key) {
$condition[] = ['like', 'item.name', $key];
}
$query->andWhere($condition);
答案 1 :(得分:1)
我认为你必须通过使用或条件加入条件。
foreach ($terms as $key) {
$query->orFilterWhere( [
'or',
[ 'like', 'item.name', $key ],
] );
}
这是你必须添加另一个或条件的方法。有关详细信息,请参阅here。 我想没有其他方法可以做到这一点而不做循环。