我目前在我的应用程序中有一个搜索功能,该功能运行正常,但我希望它返回更广泛的搜索。让我解释。
我有一个食谱应用程序,每个用户都可以上传食谱。在搜索栏中,您可以搜索配方,并根据数据库中的内容返回结果。我的问题是,如果您搜索的是复数形式,或者拼错了一点,就没有输出。示例:当配方的名称为冰沙(单数)时,搜索冰沙(复数)。但是,如果您搜索食谱并且单词不完整(平滑,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);
该功能可搜索配方的标题和描述。
我非常感谢我能提供的任何帮助!
答案 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,思慕雪,冰沙