yii2查询匹配部分单词

时间:2018-10-29 13:03:57

标签: yii2

因此,我正在为网站使用一种小型搜索工具,但是遇到一个小问题,当我输入一个单词并且如果出现该单词将返回结果,但是当我搜索该单词并添加一个多余的字符将不会返回任何结果。

当我搜索“工具”一词时,它将返回结果,因为该词出现在数据库中,但是当我搜索“工具”时,它将不返回任何内容,因为工具未在数据库中出现。 / p>

  • DB ='tool'中出现的单词
  • 使用单词'tool'=搜索数据库返回结果
  • 使用单词'tools'=搜索数据库,返回提示,因为不存在工具

当我搜索“工具”一词时,它还应该返回与“工具”相匹配的所有结果

$query->andFilterWhere([
    'or',
    ['like', 'product.name', $this->searchValue],
    ['like', 'product.desc', $this->searchValue],
]);

3 个答案:

答案 0 :(得分:0)

您可以通过singularize变形器运行搜索字符串。

$value = yii\helpers\Inflector::singularize($this->searchValue);
$query->andFilterWhere([
    'or',
    ['like', 'product.name', $value],
    ['like', 'product.desc', $value],
]);

显然,这仅适用于单个单词的复数形式。

爱德。

答案 1 :(得分:0)

您可以使用以下查询进行搜索:

$query->andFilterWhere(
 "product.name LIKE CONCAT('%',$this->searchValue,'%') OR
  product.desc LIKE CONCAT('%',$this->searchValue,'%')"
);

答案 2 :(得分:0)

  

尝试一下

$query->orFilterWhere(['like', 'product.name', $this->searchValue]);
$query->orFilterWhere(['like', 'product.desc', $this->searchValue]);