我正在建设一个网站,该网站的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;
}
答案 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]。'%');