缩写的数据库记录,但在单词搜索时出现问题

时间:2018-10-30 06:47:19

标签: php laravel search

我正在建设一个网站,该网站的mysql表中具有数据库列“ gender”和“ size”。他们用性别的m,f,en和大小的s,m,l,xl枚举。当在刀片中显示这些数据时,我使用了数组以获得适当的视图。

现在,我正在实现搜索功能,并且可以正常工作。当我键入“ m”作为关键字时,所有过滤器都可以工作并显示搜索结果,但是当我键入“ male”时会出现问题,因为没有显示结果。

public static function apply(Builder $builder, $value, $checkbox)
{
    //i am using a temporary fix like this. I need a proper fix for this.
    if(strtolower($value) == "male"){ 
        $value = "m";
    } else if (strtolower($value) == "female") {
        $value = "f";
    } else if (strtolower($value) == "other") {
        $value = "both";
    }
    if($checkbox == null) {
        $a = $builder->whereHas ('product', function ($a) use ($value) {
            $a->where('gender', 'LIKE', '%' . $value . '%');
        });
    } else {
        $a = $builder->whereHas ('product', function ($a) use ($value) {
            $a->where('gender', 'LIKE', '%' . $value . '%');
        })->whereRaw('`stocks`.`quantity` < `stocks`.`low_stock_threshold`');
    }
    return $a;
}

2 个答案:

答案 0 :(得分:0)

假设您可以在sql脚本级别解决此问题,以下是我的建议。

您可以首先对搜索文本进行归一化以使其与缩写词匹配,然后在您的where条件中应用该归一化文本。

以下是您可以执行此操作的方法之一,

DECLARE @GenderSearchText NVARCHAR(50) = 'female'
DECLARE @NormalizedSearchText NVARCHAR(50)

SET @NormalizedSearchText = 
CASE 
    WHEN @GenderSearchText = 'M' OR @GenderSearchText = 'Male'
        THEN 'M'
    WHEN @GenderSearchText = 'F' OR @GenderSearchText = 'Female'
        THEN 'F'
    ELSE    @GenderSearchText
END

SELECT @NormalizedSearchText 

--<<APPLY THIS @NormalizedSearchText to your actual where condition>>

答案 1 :(得分:0)

在您的配置文件中,将这些缩写的数组定义为数组的键,如下所示:

  

$ array {       'm'=>'male'}

现在搜索查询中的$ value使用此数组-$ array [$ value]。就您而言,它看起来像:

  

$ a-> where('gender','LIKE','%'。$ array [$ value]。'%');