我有一个标题,描述和作者字段的搜索,有没有一种方法可以使它更快或缩短代码?
public function index(Request $request)
{
$queryStr = $request->query('search');
$games = Game::withTrashed()
->with('user')
->where('title', 'like', '%' . $queryStr . '%')
->orWhere('description', 'like', '%' . $queryStr . '%')
->orWhereHas('user', function ($query) use ($queryStr) {
$query->where('username', 'like', '%' . $queryStr . '%');
})
->get();
return view('gameList', compact('games'));
}
这段代码工作,但我不喜欢每个字段都有必要重复"'like', '%' . $queryStr . '%'"
,有谁知道这是否可以做得更快,没有重复
2条答案
按热度按时间njthzxwz1#
1.在app目录中创建一个名为helpers.php的文件。
1.添加此代码
if(!function_exists('like ')){ function like($query){ return '%'.$query.'%';您的位置
1.在composer.json文件中添加“autoload”:
{“files”:[“app/helpers.php”] },
1.$queryStr = like($request->query('search '));
1.替换“%”。$queryStr .$queryStr上的“%”
7eumitmz2#
首先,我建议您保持代码原样。这是一种标准的方式,任何laravel开发人员都会在第一眼就理解它。
话虽如此,您正在寻找雄辩的宏,而您的确切问题由天才Freek货车der赫尔滕在https://freek.dev/1182-searching-models-using-a-where-like-query-in-laravel中描述
总之,您可以在“AppServiceProvider”的 Boot 方法中定义宏:
然后你可以像这样使用它:
请阅读这篇博客文章,它深入介绍了如何优化和使用这个宏。