Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel雄辩-多列串联过滤_Php_Mysql_Laravel_Eloquent_Filtering - Fatal编程技术网

Php Laravel雄辩-多列串联过滤

Php Laravel雄辩-多列串联过滤,php,mysql,laravel,eloquent,filtering,Php,Mysql,Laravel,Eloquent,Filtering,我是拉威尔的新手,我在尝试执行以下任务时遇到了困难。我有一个简单的用户表,其中包含以下列: id 名字 姓氏 我将创建一个带有过滤选项的用户列表。其中一个过滤器是full\u name,但我不存储用户的full\u name,并且我无法修改表结构 过了几天,我明白了这一点: $query = \DB::table('users'); $query->select(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`) a

我是拉威尔的新手,我在尝试执行以下任务时遇到了困难。我有一个简单的用户表,其中包含以下列:

  • id
  • 名字
  • 姓氏
我将创建一个带有过滤选项的用户列表。其中一个过滤器是
full\u name
,但我不存储用户的
full\u name
,并且我无法修改表结构

过了几天,我明白了这一点:

$query = \DB::table('users');
$query->select(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`) 
        as `full_name`, id'))->having('full_name', 'LIKE',$input['filter_name']);
$result = $query->get(['*']);
但它不起作用


规范:我正在使用最新的laravel

也许不要试图通过修改查询来实现它,而是像平常一样获取查询:

$users=DB::table('users')->get()
然后,使用。
->filter(function($key,$value){return strpos($value['first\u name']..'...$value['last\u name'],$to\u find)!==false}->all();

我想你忘了LIKE语句中的通配符

而不是这个

$query->select(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`) 
    as `full_name`, id'))->having('full_name', 'LIKE',$input['filter_name']);
尝试:


我解决了。第一个问题是,我忘记了“%”通配符

第二个使用连接值作为过滤器,然后Laravels paginate尝试使用该连接值对整个结果计数。当然它不存在。解决办法是:

$query = \App\User::whereDeletedAt(null);
$query->where(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`)'), 'like', '%' . $input['filter_name'] . '%');
$query->paginate(15, ['*'], 'page', 1);

到底是什么不起作用?你有错误吗?在调试laravel中的查询时通读这篇文章:如果我将它与paginate
$query->paginate(10,['*'],'page',1)
一起使用,我会遇到以下错误:“未找到列:1054”“having子句”(SQL:select count(*)中的未知列“full_name”)作为
用户
的聚合,其中
删除的用户
为空,
用户
删除的用户
为空,具有
全名
如ad%。”。它试图计算整体结果…有解决方案吗?@Olaszka我认为错误很明显。它不知道
全名是什么。我想你忘记了
…全名是什么了。否则,用新问题更新问题。
$query = \App\User::whereDeletedAt(null);
$query->where(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`)'), 'like', '%' . $input['filter_name'] . '%');
$query->paginate(15, ['*'], 'page', 1);