首页 > 解决方案 > Laravel 搜索过滤器

问题描述

我正在尝试使用 eloquent 样式获取所有列和值以进行搜索。这是一个过滤器功能。好像我做错了什么。任何帮助将不胜感激。

protected static function search($query, $fields, $value)
{
    return $query->where(function($query) use ($fields, $value){
        collect($fields)->reduce(function($query, $field) use ($value) {
            return $query->OrWhere($field, 'like','%' . $value . '%');
        }, $query);
    });     
}

好吧,当我明确添加列名时,它可以工作。

return $query->where('title', 'like', '%' .$value. '%')
    ->orWhere('fehlercode', 'like', '%' .$value. '%');

标签: phplaravelsearcheloquent

解决方案


我认为 reduce 在这种情况下非常激进,这更适合将多个变量连接成一个,each() 是一种更好的方法。此外,该orWhere()方法以大写字母开头拼写错误,Laravel使用 psr2,该方法在该方法上使用驼峰式大小写。

return $query->where(function($query) use ($fields, $value){
    collect($fields)->each(function($field) use ($query, $value) {
        $query->orWhere($field, 'like','%' . $value . '%');
    });
});    

推荐阅读