如何在数据表中按列并集进行搜索
How to search by columns union in datatable?
我需要按用户名字和姓氏进行搜索,其中合并为一个。我正在使用 laravel 5.1 和 http://datatables.yajrabox.com/。
这是我的后端查询代码:
$orders = Order::select([
'orders.created_at',
'users.firstname AS user_firstname',
'users.lastname AS user_lastname'
])
->join('users', 'users.id', '=', 'orders.user_id')
->where('orders.client_id', 'Auth::user()->client_id)
->where('orders.status', 'finished');
并返回:
return Datatables::of($orders)
->addColumn('user', function ($user) {
return $user->user_firstname.' '.$user->auser_lastname;
})
->addColumn('action', function ($order) {
return '<div class="btn-group" style="min-width: 76px;">
<a href="'.url('history/order/edit/'.$order->id).'" class="btn btn-default"><i class="fa fa-edit"></i></a>
<a href="'.url('history/order/delete/'.$order->id).'" class="btn btn-default" onClick="return confirm(''Are you sure?'');"><i class="fa fa-times"></i></a>
</div>';
})
->removeColumn('user_firstname')
->removeColumn('user_lastname')
->make(true);
我将用户列合并为一个具有user_firstname和user_lastname的列。
当 im 在数据表中搜索时,我需要按此列搜索 - USER。查询如下所示:
SELECT
`orders`.`created_at`,
`users`.`firstname` AS `agent_firstname`,
`users`.`lastname` AS `agent_lastname`,
FROM
`orders`
INNER JOIN `users` ON `users`.`id` = `orders`.`user_id`
WHERE
`orders`.`client_id` = '3'
AND `orders`.`status` = 'finished'
AND (
LOWER(`orders`.`created_at`) LIKE '%search_word%'
OR LOWER(`users`.`firstname`) LIKE '%search_word%'
OR LOWER(`users`.`lastname`) LIKE '%search_word%'
)
ORDER BY
`orders`.`created_at` DESC
LIMIT 10 OFFSET 0
这是我的数据表 JS:
// Data tables
var oTable = $('#orders-data').dataTable({
"processing": true,
"serverSide": true,
"ajax": '/history/orders',
"columns": [
{ data: 'created_at', name: 'orders.created_at' },
{ data: 'user', name: 'user' },
{ data: 'action', name: 'action', orderable: false, searchable: false }
],
});
如果我将 JS 中的行 { data: 'user', name: 'user' } 更改为 { data: 'user', name: 'users.firstaname' } 而不是只在 users.firstname 列中搜索,但我也需要在 users.lastname 中搜索。
怎么做?
问题解决了!这是我的代码:
$orders = Order::select([
'orders.created_at',
'DB::raw("CONCAT(users.firstname,' ',users.lastname) as user")
])
->join('users', 'users.id', '=', 'orders.user_id')
->where('orders.client_id', 'Auth::user()->client_id)
->where('orders.status', 'finished');
函数返回:
return Datatables::of($orders)
->filterColumn('user', function($query, $keyword) {
$query->whereRaw("CONCAT(users.firstname,' ',users.lastname) like ?", ["%{$keyword}%"]);
})
->addColumn('action', function ($order) {
return '<div class="btn-group" style="min-width: 76px;">
<a href="'.url('history/order/edit/'.$order->id).'" class="btn btn-default"><i class="fa fa-edit"></i></a>
<a href="'.url('history/order/delete/'.$order->id).'" class="btn btn-default" onClick="return confirm(''Are you sure?'');"><i class="fa fa-times"></i></a>
</div>';
})
->removeColumn('user_firstname')
->removeColumn('user_lastname')
->make(true);
也许这对其他人有帮助!
相关文章:
- 用程序搜索JQuery数据表中的文本
- 使用数据表,如何在要搜索的
中指定元素 - 如何使用代码点火器使用Bootstarp数据表搜索数据嵌套表数据
- 数据表 + 列搜索 + 整体搜索协同工作 + 服务器端处理
- 数据表 + 服务器端处理 + 搜索筛选
- 允许在表刷新后键入数据表搜索按钮
- 数据表或搜索
- 用于服务器端处理的数据表,包括分页、筛选和搜索
- 使用数据表,我想只搜索第一个字母
- [ jQuery/Datatable ]:数据表无响应,禁用输入搜索
- 如何将搜索添加到页脚中数据表的某些单独列
- 如何在服务器端处理中使用数据表搜索
- 初始化 jQuery 数据表中的搜索输入
- 通过jquery在数据表中设置“搜索框”的值为空
- JQuery 数据表在输入和选择中搜索
- 如何在数据表中按列并集进行搜索
- 通过传递 ID 搜索数据表中的数据
- 如何在jquery中改变输入搜索数据表的方向
- 如何在JQuery中使用正则表达式在json字符串上搜索数据表列
- 首先用jquery搜索数据表重绘