我正在尝试修改使用Laravel的模板,我对这种语言很新。我正在尝试过滤搜索结果以匹配所有搜索过的字词。
例如,用户搜索" Red",搜索会返回所有红色结果。用户搜索"卡车",搜索返回所有卡车。但是如果用户搜索"红色卡车",则搜索返回"红色"搜索结果和"卡车"搜索结果。那里有红色汽车和红色自行车,还有黄色卡车......但我只想要" Red Trucks"要显示。如果结果中没有保存其中一个标签,我就不希望它显示出来。目前它只需要包含一个标签并显示它。
我知道我需要修改"其中"和" orwhere"标签的部分'标签'并且可能会将它们更改为' =',但我无法通过我的反复试验来解决问题。
作为参考,上传的红色卡车照片将在phpmyadmin的标签字段中显示以下内容:红色,降低,s10,卡车,光泽,自定义,条纹
所以搜索" Red Truck"应该返回此图片,而不是包含任何" red" "汽车"
搜索文本框的名称为" q"和id =" srch-term" 。搜索" Red Truck"会在浏览器中显示/搜索?q =红色+卡车。
基本代码:
public function search($search, $timeframe = null)
{
$extends = explode(' ', $search);
$images = $this->posts($timeframe)->Where('tags', 'LIKE', '%' . $search . '%')
->whereNull('deleted_at')->whereNotNull('approved_at')->orderBy('approved_at', 'desc');
foreach ($extends as $extend) {
$images->orWhere('tags', 'LIKE', '%' . $extend . '%')->whereNotNull('approved_at')->whereNull('deleted_at');
}
return $images = $images->with('user', 'comments', 'favorites')->whereNotNull('approved_at')->whereNull('deleted_at')->paginate(perPage());
}
答案 0 :(得分:1)
想出来了!
Public function search($search, $timeframe = null)
{
$extends = explode(' ', $search);
$images = $this->posts($timeframe)
->whereNull('deleted_at')->whereNotNull('approved_at')
->orderBy('approved_at', 'desc');
$images->where(function($q) use ($extends) {
foreach ($extends as $extend) {
$q->Where('tags', 'LIKE', '%' . $extend . '%');
}
});
return $images->with('user', 'comments', 'favorites')->paginate(perPage());
}
答案 1 :(得分:0)
你很好。只需在您的查询中使用whereIn,就像这样。
| Date | Total | CummlativeTotal |
|------------|-------|-----------------|
| 2017-12-25 | 3 | 3 |
| 2017-12-26 | 2 | 5 |
| 2017-12-27 | 2 | 7 |
更新的答案
$images->whereCategoryId($categoryId)->whereIn('tags', $extends)->whereNotNull('approved_at')->whereNull('deleted_at');