yajra / laravel-datatables搜索不适用于laravel 5.4
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yajra / laravel-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');
这是分配Datatables
的代码
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' }
]
});
现在,当我尝试搜索某些内容时,它会向我发出错误警报这是一条错误消息,
现在我想知道,
如何使用JOIN
和CONCAT
列快速搜索?
有没有具体的方法来做到这一点?
请建议我最好的方式......
答案
它根本不适用于POST。尝试使用GET作为Http方法。 (至少对于Laravel 5.5和5.6)
另一答案
使用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 7.0或更高版本更新您的PHP版本,然后它将正常工作。
以上是关于yajra / laravel-datatables搜索不适用于laravel 5.4的主要内容,如果未能解决你的问题,请参考以下文章
yajra / laravel-datatables搜索不适用于laravel 5.4