gpt4 book ai didi

php - Laravel 搜索查询 - 'OR' 和 'AND' 的 SQL 排序破坏了 foreach 循环查询

转载 作者:行者123 更新时间:2023-11-28 23:59:02 26 4
gpt4 key购买 nike

我的搜索功能无法正常工作。目前,我有一个带有两个单选按钮(“关键字”和“精确”)的搜索表单,根据他们选择的内容,它应该在数据库中搜索给定的字符串数组或单个字符串(标题和描述应该一起包含所有搜索到的关键字)。当用户通过关键字(一堆单字串)进行搜索时,就会出现问题。目前,当我从表单中获取字符串时,我将其分解,然后通过它运行一个 foreach 循环,但是,由于 SQL 对“OR”和“AND”运算符的排序,它最终变得一团糟。

例如,search_value=black+darker 的搜索值将 $query->toSql() 到

"select * from `animes` where `description` like ? or `name` like ? and `description` like ? or `name` like ?"

但是,SQL 将其读取为

"select * from `animes` where (`description` like ?) or (`name` like ? and `description` like ?) or (`name` like ?)"

这是我的代码(忽略与“流派”相关的任何内容,因为该部分按预期正常工作):

public function searchAnimes(SearchRequest $request)
{
if($request->search_type == 'keyword')
{
$animeSearchValues = explode(' ', Input::get('search_value'));
}
elseif($request->search_type == 'exact')
{
$animeSearchValues[0] = Input::get('search_value');
}
else
{
return redirect('animes');
}
$genres = $request->name;
$query = Anime::query();

if(isset($animeSearchValues) && strlen(Input::get('search_value')) >= 3)
{
foreach($animeSearchValues as $animeSearchValue)
{
$query->where('description', 'like', '%'.$animeSearchValue.'%')
->orWhere('name', 'like', '%'.$animeSearchValue.'%');
}

if(isset($genres))
{
foreach ($genres as $genre)
{
$query->whereHas('genres', function ($f) use ($genre)
{
$f->where('slug', $genre);
});
}
}
$animeResults = $query->orderBy('name')->paginate(10);
return view('animes.results', compact('animeResults'));
}
}

我能想到的唯一解决方案是将标题和描述合并为一个字符串,然后在其中搜索每个单独的关键字,但是,该方法似乎过于草率或非标准。另外,请记住,我需要在单个查询构建器中完成所有操作,以便我可以分页显示结果。

谢谢。

最佳答案

这是你想要的吗?这将搜索在标题或描述中包含每个关键字的所有内容。

foreach($animeSearchValues as $animeSearchValue){
$query->where(function ($q) use ($animeSearchValue){
$q->where('description', 'like', '%'.$animeSearchValue.'%')
->orWhere('name', 'like', '%'.$animeSearchValue.'%');
});
}

关于php - Laravel 搜索查询 - 'OR' 和 'AND' 的 SQL 排序破坏了 foreach 循环查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30628003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com