2016-02-26 89 views
0

我需要搜索用户的名字和姓氏在哪里合并为一个。我正在使用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。

当我在数据表中搜索时,我需要通过此列 - 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给{数据: 'user',name:'users.firstaname'}比只在users.firstname列中搜索,但我也需要在users.lastname中搜索。

如何做到这一点?

回答

0

问题解决了!这里是我的代码:

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

也许它可以帮助别人!