【问题标题】:Laravel DataTables search in column generated with DB::rawLaravel DataTables 在使用 DB::raw 生成的列中搜索
【发布时间】:2018-08-22 03:41:34
【问题描述】:

我在 Laravel DataTables (yajra/laravel-datatables ) 中有以下问题:

我无法在使用 DB::Raw 生成的列中搜索(过滤)。

我也无法使用全局搜索功能进行搜索。

在我的 Laravel 控制器中:

$inputs = Input_::join('companies', 'companies.id', '=', 'inputs.company_id')
->leftjoin('inputs_details', 'inputs_details.input_id', '=', 'inputs.id')
->select(array('inputs.id as id',
    'inputs.created_at as created_at',
    'inputs.updated_at as updated_at',
    'inputs.input_at as input_at',
    'companies.name',
    'inputs.documents as documents',
    DB::raw("SUM(inputs_details.quantity*inputs_details.price_input*(1+inputs_details.VAT/100)) as input_total")
))
->groupBy('inputs.id')
->orderBy('inputs.input_at', 'DESC');

    return Datatables::of($inputs)
        ->remove_column('id')
        ->make(true);

在我看来:

$('#inputs-table').DataTable({
    processing : true,
    serverSide : true,
    ajax: '{{ URL::to('employee/inputs/data/') }}',
    columns: [
        {data: 'created_at', name: 'inputs.created_at', orderable: false},
        {data: 'updated_at', name: 'inputs.updated_at', orderable: false},
        {data: 'input_at', name: 'inputs.input_at', orderable: false},
        {data: 'name', name: 'companies.name', orderable: false},
        {data: 'documents', name: 'inputs.documents', orderable: false},
        {data: 'input_total', name: 'input_total', orderable: false, searchable: true},
        {data: 'reports', name: 'reports', orderable: false, searchable: false},
        {data: 'actions', name: 'actions', orderable: false, searchable: false}
    ],
    initComplete: function () {
        this.api().columns().every(function () {
            var column = this;
            var input = document.createElement("input");
            $(input).appendTo($(column.footer()).empty())
            .on('change', function () {
                var val = $.fn.dataTable.util.escapeRegex($(this).val());
                column.search(val ? val : '', true, false).draw();
            });
        });
    }  });  

【问题讨论】:

  • 我遇到了同样的问题,几天后无法解决。
  • 你的 Datatables 版本是什么?

标签: laravel-5 datatables


【解决方案1】:

您必须将 filterColumn 操作放入您的数据表中。

$inputs = Input_::join('companies', 'companies.id', '=', 'inputs.company_id')
    ->leftjoin('inputs_details', 'inputs_details.input_id', '=', 'inputs.id')
    ->select(array('inputs.id as id',
        'inputs.created_at as created_at',
        'inputs.updated_at as updated_at',
        'inputs.input_at as input_at',
        'companies.name',
        'inputs.documents as documents',
        DB::raw("SUM(inputs_details.quantity*inputs_details.price_input*(1+inputs_details.VAT/100)) as input_total")
    ))
    ->groupBy('inputs.id')
    ->orderBy('inputs.input_at', 'DESC');

return Datatables::of($inputs)
            ->remove_column('id')
            ->filterColumn('input_total', function($query, $keyword) {
                $query->whereRaw("SUM(inputs_details.quantity*inputs_details.price_input*(1+inputs_details.VAT/100)) = ?", $keyword);
            })
            ->make(true);

【讨论】:

  • 如何在input_total上添加订单?
  • @er.irfankhan11 input_total 是什么意思?是计数还是字段?
猜你喜欢
  • 2015-11-20
  • 1970-01-01
  • 2015-10-27
  • 2018-10-24
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多