简体   繁体   English

如何在数据表中按列联合搜索?

[英]How to search by columns union in datatable?

i need to search by user firstname and lastname where are merge to one. 我需要按用户名和姓氏搜索,其中合并为一个。 Im working with laravel 5.1 and http://datatables.yajrabox.com/ . 我正在使用laravel 5.1和http://datatables.yajrabox.com/

Here is me code of backend query: 这是我后端查询的代码:

                $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');

And return: 并返回:

        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);

I merge user column to one with user_firstname and user_lastname. 我将用户列与user_firstname和user_lastname合并为一个。

When im searchng in datatable i need to search by this column - USER. 当我在数据表中搜索时,我需要按此列搜索-用户。 Query to to be like this: 查询如下:

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

Here is my datatable JS: 这是我的数据表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 }
    ],
});

If I change line { data: 'user', name: 'user' } in JS to { data: 'user', name: 'users.firstaname' } than searching only in users.firstname column, But i need search in users.lastname too. 如果我将JS中的第{data:'user',name:'user'}行更改为{data:'user',name:'users.firstaname'}而不是仅在users.firstname列中进行搜索,但是我需要在users中进行搜索.lastname。

How to do that? 怎么做?

problem is solved! 问题解决了! Here is my code: 这是我的代码:

$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');

function return: 函数返回:

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);

Maybe it helps for others! 也许对别人有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM