Функция поиска Laravel 5.8 не работает для множественных слов - PullRequest
0 голосов
/ 26 апреля 2019

У меня в настоящее время есть функция поиска в моем приложении, которая прекрасно работает, но я хочу, чтобы она возвращала более широкий поиск.Позволь мне объяснить.

У меня есть приложение с рецептами, где каждый пользователь может загрузить рецепт.В строке поиска вы можете искать рецепты, и это возвращает результат на основе того, что находится в базе данных.Моя проблема в том, что если вы ищете что-то во множественном числе или немного ошибаетесь, то ничего не выводится.Пример: поиск смузи (множественное число), когда рецепты называются смузи (единственное число).Тем не менее, если вы ищете рецепт и слово является неполным (сглаживать, сма, см), то он возвращает все результаты, которые имеют законченное слово.Так что я хочу ту же функциональность, но для слов, которые имеют слишком много букв или во множественном числе.

Вот моя текущая логика:


public function search(Request $request){
        $q = $request->input('search');
        $recipes = Recipe::where('title', 'LIKE', '%'.$q.'%')->orWhere('description', 'LIKE', '%'.$q.'%')->get();
        return view('recipes.results')->with('recipes', $recipes)->with('query', $q);


Функция выполняет поиск по заголовкам и описаниям рецептов.

Я ценю любую помощь, которую могу получить!

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

позвольте мне перефразировать ваш код. И попробуйте прочитать этот полезный помощник Laravel Помощники Laravel

use Illuminate\Support\Str;
//dont forget to import this


public function search(Request $request){

    $q = $request->input('search');
    $singular = Str::singular($q);
    $plural= Str::plural($q);

    $recipes = Recipe::where('title', 'LIKE', '%'.$singular .'%')
       ->orWhere('title', 'LIKE', '%'.$plural.'%')
       ->orWhere('description', 'LIKE', '%'.$singular .'%')
       ->orWhere('description', 'LIKE', '%'.$plural.'%')
       ->get();

    return view('recipes.results')->with('recipes', $recipes)->with('query', $q);
0 голосов
/ 26 апреля 2019

это будет работать, но я не думаю, что это правильный способ сделать это

public function search(Request $request){
    $q = $request->input('search');
    $recipes = Recipe::where(function($query) use($q){
        for($x = 3; $x < strlen($q); $x++) {
            if($x==3) {
                $query->where('title', 'LIKE', '%'.substr($q, 0, $x).'%');
            }
            else {
                $query->orWhere('title', 'LIKE', '%'.substr($q, 0, $x).'%');
            }
        }
    })->orWhere('description', 'LIKE', '%'.$q.'%')->get();
    return view('recipes.results')->with('recipes', $recipes)->with('query', $q);

, когда пользователь ищет "смузи", он будет искать все рецепты с

smo, сму, смуф, смуф, смузи, смузи, смузи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...