Yajra Laravel Datatable - 合并列值

时间:2016-05-17 09:39:32

标签: laravel datatables

我已将Yajra Datatables纳入我的Laravel项目并且工作正常。

问题是我需要合并3个列值并将它们显示为1并允许同时搜索。

我该怎么做?

我能够使用渲染功能并在单个列中显示数据。但那么如何搜索?

示例Mysql表:

student_master(fname,mname,lname)

在javascript上我有:

columns: [
    {data: 'thiscanbeanything', render:function ( data, type, row ) {                        
                return row.fname+row.mname+row.lname;
            }},
]

控制器上的我的Ajax功能如下所示

 $results = DB::table("student_master")
            ->select(['fname', 'mname', 'lname']);

    return Datatables::of($results)                        
                    ->make(true);

2 个答案:

答案 0 :(得分:8)

您可以尝试以下代码

在服务器端

$results = DB::table("student_master")
        ->select(['fname', 'mname', 'lname']);

return Datatables::of($results)
      ->addColumn('mergeColumn', function($row){
      return $row->fname.$row->mname.$row->lname;
})
->make(true);

Javascript Side

` columns: [
        {data: 'mergeColumn', name: 'mergeColumn', searchable: false, sortable : false, visible:true},
        {data: 'fname', name: 'fname', searchable: true, sortable : true, visible:false},
        {data: 'mname', name: 'mname', searchable: true, sortable : true, visible:false},
        {data: 'lname', name: 'lname', searchable: true, sortable : true, visible:false},
    ],`

以上代码未经过测试,但您可以尝试。如果您有任何问题,请告诉我。

答案 1 :(得分:0)

服务器端

    $results = DB::table("student_master")
    ->select([
        DB::raw('CONCAT(fname, " ", mname, " ", lname) as name'),
    ]);

    return Datatables::of($results)
    ->filterColumn('name', function($query, $keyword) {
        $query->whereRaw('CONCAT(fname, " ", mname, " ", lname) like ?', ["%{$keyword}%"]);
    })
    ->make(true);

JS

 columns: [
            { data: 'name'},
        ]

现在您可以搜索和排序