сокращенные записи базы данных, но возникла проблема при поиске - PullRequest
0 голосов
/ 30 октября 2018

У меня есть сайт в разработке, в котором есть столбец базы данных «пол» и «размер» в таблице в MySQL. это перечисление с m, f как для пола, так и для s, m, l, xl для размера. При отображении этих данных в блейдах я использовал массивы для правильного просмотра.

Теперь я использую функцию поиска, и она работает нормально. Когда я набираю 'm' в качестве ключевых слов, отображаются все фильтры и результаты поиска, но проблема возникает, когда я набираю 'мужской', так как результаты не отображаются.

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 голосов
/ 30 октября 2018

В вашем конфигурационном файле определите массив этих аббревиатур в качестве ключей для массива, например:

$ массивы { 'm' => 'male'}

Теперь для $ value в вашем поисковом запросе используйте этот массив - $ array [$ value]. В вашем случае это будет выглядеть так:

$ a-> где («пол», «LIKE», «%». $ Array [$ value]. «%»);

0 голосов
/ 30 октября 2018

Предполагая, что вы можете исправить решение на уровне сценария 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>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...