php - yajra/laravel-datatables 搜索不适用于 laravel 5.4

标签 php jquery mysql datatables laravel-5.4

我使用yajra/laravel-datatables来创建数据网格列表。我已根据要求使用联接来检索信息。

这是加入代码

$inquiryInvoice = DB::table('inquiry_invoice')->select('inquiry_invoice.*',DB::raw('CONCAT(inquiry_personal.first_name, " ", inquiry_personal.middle_name, " ", inquiry_personal.last_name) AS full_name'), 'inquiry_personal.id as inquiry_personal_id','branches.branch_name',DB::raw('CONCAT(users.first_name, " ", users.last_name) AS user_full_name'), DB::raw('CONCAT(counselor.first_name, " ", counselor.last_name) AS counselor_full_name'), 'inquiry_counselor.user_id as inquiry_counselor_user_id','inquiry_master.workflow_id',DB::raw(' "invoice" AS type'))
                ->join('inquiry_master', 'inquiry_master.id', '=', 'inquiry_invoice.inquiry_id')
                ->join('inquiry_personal', 'inquiry_master.id', '=', 'inquiry_personal.inquiry_id')
                ->join('branches', 'inquiry_master.branch_id', '=', 'branches.id')
                ->join('users', 'inquiry_master.user_id', '=', 'users.id')
                ->leftJoin('inquiry_counselor', 'inquiry_master.id', '=', 'inquiry_counselor.inquiry_id')
                ->leftJoin('users as counselor', 'inquiry_counselor.user_id', '=', 'counselor.id');

这是分配数据表的代码

return Datatables::of($inquiryInvoice)
            ->escapeColumns([])
            ->make(true);

这是 jQuery 代码

$dataTable = $('#data-table').DataTable({
            processing: true,
            serverSide: true,
            Filter: true,
            url:'{!! url("transaction_any_data") !!}',
            columns: [
                { data: 'full_name', name: 'full_name' },
                { data: 'branch_name', name: 'branch_name' },
                { data: 'user_full_name', name: 'user_full_name' },
                { data: 'counselor_full_name', name: 'counselor_full_name' }
            ]
        });

现在,当我尝试搜索某些内容时,它会向我发出警报,并带有错误 这是一条错误消息, enter image description here

现在我想知道

如何使用 JOINCONCAT 列快速搜索?

有具体方法吗?

请建议我最好的方法...

最佳答案

使用 Laravel DataTables,您需要在 columns.name 中包含表名称当您使用两个或多个名称不明确的表时的选项。

由于 full_name 是不明确的名称,您需要将其更改为 inquiry_invoice.full_name

例如:

$dataTable = $('#data-table').DataTable({
   processing: true,
   serverSide: true,
   url:'{!! url("transaction_any_data") !!}',
   columns: [
      { data: 'full_name', name: 'inquiry_invoice.full_name' },
      { data: 'branch_name', name: 'branch_name' },
      { data: 'user_full_name', name: 'user_full_name' },
      { data: 'counselor_full_name', name: 'counselor_full_name' }
   ]
});

另一个问题是您需要使用 HAVING 而不是 WHERE 来搜索使用 CONCAT 生成的列。您需要使用filterColumn()为最后三列生成自定义搜索子句的方法。

例如(未经测试):

return Datatables::of($inquiryInvoice)
        ->escapeColumns([])
        ->filterColumn('branch_name', function($query, $keyword) {
            $query->havingRaw('LOWER(branch_name) LIKE ?', ["%{$keyword}%"]);
        })
        ->filterColumn('user_full_name', function($query, $keyword) {
            $query->havingRaw('LOWER(user_full_name) LIKE ?', ["%{$keyword}%"]);
        })
        ->filterColumn('counselor_full_name', function($query, $keyword) {
            $query->havingRaw('LOWER(counselor_full_name) LIKE ?', ["%{$keyword}%"]);
        })
        ->make(true);

关于php - yajra/laravel-datatables 搜索不适用于 laravel 5.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689699/

相关文章:

php - 键入内容后,值会出现在文本框中

javascript - 当用户关闭浏览器选项卡时如何显示弹出窗口?

javascript - 如何创建循环来创建变量?

php - 从mysql获取数据库

php - 检查 MySQL 连接 (OOP PHP)

php - 如何避免DOM解析添加html doctype、<head>和<body>标签?

javascript - 如何在.js文件中调用php变量?

php - 为什么 PHP 会将 (int) ((0.1+0.7)*10) 的结果转换为 7,而不是 8?

javascript - 如何在具有相同值的下拉菜单上触发 jQuery 更改事件

mysql - 如何在 Mac 上永久激活非管理员帐户的 XAMPP 的 apache 和 mysql