如何在yajra datable中搜索“连接列”?

时间:2019-04-01 03:54:23

标签: php laravel yajra-datatable

我在控制器上使用datatable类,并用它来绘制其中有一个串联的“名称”列的数据表。因此默认搜索功能有效。在这种情况下,我找不到自定义过滤器的示例

//这是数据表。我试图在dataTable函数上使用filterColumn(),但没有找到方法。

namespace App\DataTables;

use App\User;
use Illuminate\Support\Facades\DB;
use Yajra\DataTables\Services\DataTable;

class UsersDatatable extends DataTable
{

    public function dataTable($query)
    {
        return datatables($query)
            ->addColumn('action', function ($users) {
                return '<a href="'.route('users.edit',$users->id).'" class="btn btn-sm btn-primary" style="margin:3px"><i
                                                    class="glyphicon glyphicon-edit"></i> Edit</a></a>&nbsp;&nbsp;<a href="'.route('users.destroy',$users->id).'" class="btn btn-sm btn-danger"><i class="glyphicon glyphicon-remove"></i> Delete</a>';
            });
    }

    public function query(User $model)
    {
        return $model->newQuery()->select('id', DB::raw('CONCAT(FirstName," ", Surname ) AS name'), 'email', 'phone_no');
    }

    public function html()
    {
//   
        return $this->builder()
                    ->columns($this->getColumns())
                    ->minifiedAjax()
                    ->addAction(['width' => '130px'])
                    ->parameters($this->getBuilderParameters());
    }

    protected function getColumns()
    {
        return [
            'id',
            'name',
            'email',
            'phone_no',
        ];
    }
    protected function filename()
    {
        return 'Users_' . date('YmdHis');
    }
}

这是控制者


namespace App\Http\Controllers\Backend;

use App\DataTables\UsersDatatable;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Yajra\DataTables\DataTables;
class RegisterController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(UsersDatatable $user)

    {
            return $user->render('backend.Users.indexUser');

    }

//这是视图

        <div class="card-header">
            Index User
        </div>
        <div class="card-body">
            <h5 class="card-title">Table</h5>
            {!! $dataTable->table(['class' => 'table table-striped ']) !!}
        </div>
    </div>
@endsection
@section('scripts')
    <script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
    <!-- from dataTables push-->
    <script src="https://cdn.datatables.net/buttons/1.4.2/js/dataTables.buttons.min.js"></script>
    <script src="{{asset('vendor/datatables/buttons.server-side.js')}}"></script>
    {!! $dataTable->scripts() !!}```

1 个答案:

答案 0 :(得分:1)

filterColumnaddColumn之后(或editColumn之后的其他位置)添加datatables($query)

datatables($query)
    ->addColumn('action', function ($obj) {
        return '';          
    })
    ->filterColumn('name', function ($query, $keyword) {
        $keywords = trim($keyword);
        $query->whereRaw("CONCAT(first_name, sur_name) like ?", ["%{$keywords}%"]);
     });