搜索功能Laravel 5.8不适用于复数单词

时间:2019-04-26 02:47:10

标签: php laravel eloquent

我目前在我的应用程序中有一个搜索功能,该功能运行正常,但我希望它返回更广泛的搜索。让我解释。

我有一个食谱应用程序,每个用户都可以上传食谱。在搜索栏中,您可以搜索配方,并根据数据库中的内容返回结果。我的问题是,如果您搜索的是复数形式,或者拼错了一点,就没有输出。示例:当配方的名称为冰沙(单数)时,搜索冰沙(复数)。但是,如果您搜索食谱并且单词不完整(平滑,smo,sm),则它将返回具有完整单词的所有结果。因此,我希望具有相同的功能,但对于字母过多或复数的单词。

这是我当前的逻辑:


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 个答案:

答案 0 :(得分:1)

让我重新编写您的代码。并尝试阅读laravel Laravel Helpers

的有用帮助
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);

答案 1 :(得分:0)

这将起作用,但我认为这不是正确的方法

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,smoo,smoot,smooth,smooth,思慕雪,冰沙