我是Laravel的新手,我在尝试执行以下操作时遇到困难。我有一个简单的用户表,其中包含以下列:
id
first_name
last_name
我即将制作一个带有过滤选项的用户列表。其中一个过滤器是full_name
,但我不存储full_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。
答案 0 :(得分:1)
我认为你在LIKE声明中忘记了通配符。
而不是这个
$query->select(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`)
as `full_name`, id'))->having('full_name', 'LIKE',$input['filter_name']);
尝试:
$query->select(\DB::raw('CONCAT_WS(" ", `last_name`, `first_name`)
as `full_name`, id'))->having('full_name', 'LIKE', '%' . $input['filter_name'] . '%');
答案 1 :(得分:0)
也许不是通过modyfing查询来实现它,而是像正常一样获取查询:
$users = DB::table('users')->get();
然后,使用collections。
->filter(function($key, $value) { return strpos($value['first_name'].' '.$value['last_name'], $to_find) !== false })->all();
答案 2 :(得分:0)
我解决了。第一个问题是,我忘记了"%"通配符。
第二个使用连接值作为过滤器,然后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);