Search code examples
laraveldatatableslaravel-8datatables-1.10yajra-datatable

Yajra Datatable search bar not working in laravel


Yajra Datatable search bar not working after two text type datatable showing empty enter image description here

after search enter image description here

Jquery ->

 $(function () {

    var table = $('#projectcashflow_data').DataTable({
      processing: true,
        serverSide: true,
        lengthMenu: [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
         dom: 'Blfrtip',
                    "buttons": [
                        {
                            "extend": 'excelHtml5',
                             "title": 'Expense_Manage',
                            "text": '<button class="btn"><i class="fa fa-file-excel-o" style="color:    green;"></i>  Excel</button>',
                            "titleAttr": 'Excel',
                            exportOptions: {
                         modifier : {
                              page : 'all',
                         },
                          rows: { order:'current', search: 'none' },
                        columns: [1, 2, 3, 4, 5],
                      
                    }
                        },
                    ],
        ajax: "{{ route('projectcashflow.load-projects-cashflow') }}",
        columns: [
            {data: 'DT_RowIndex', name: 'DT_RowIndex'},
            {data: 'edit.projects_name', name: 'projects_name'},
        
            {
                data: 'action', name: 'action', 
                orderable: true, 
                searchable: true
            },
        ],
     
        
    });


  });

Server Side Code(Laravel) My DataTable query function is al follows.->

 public function load_projects_cashflow(Request $request){
        if($request->ajax()){
            $data = ProjectCashflow::select('project_cashflows.*','projects.project_name')
                    ->leftjoin('projects', 'projects.id', 'project_cashflows.project_id')
                    ->get();


             return Datatables::of($data)
                    ->addIndexColumn()
                    ->addColumn('action', function($row){
                        $dataedit =  route('projectcashflow.edit-projectscashflow',$row->id);
                        $actionBtn = "<a class='' style='margin-right:15px' href='{$dataedit}'
                        ><i class='bx bx-edit-alt me-1'></i></a>";
                        $viewButton = "<a style='margin-right:15px' class='projectcashflowdetails' data-id='{$row->id}' data-toggle='modal' data-target='#projectcashflowdetails' style='cursor: pointer;' ><i class='fa-solid fa-eye me-1'></i></a>";
                        $deletebutton =  "<a class='projectcashflow_delete' id='projectcashflow_delete' style='cursor: pointer;' data-id='$row->id'><i class='bx bx-trash-alt me-1'></i></a>";
                        return $actionBtn.' '.$viewButton.' '.$deletebutton;
                    })
                    ->editColumn('edit', function($row){

                            $projectname = "<a class='projectcashflowdetails' data-id='{$row->id}' data-toggle='modal' data-target='#projectcashflowdetails' style='cursor: pointer;' >$row->project_name</a>";

                        return [
                           
                            'projects_name' => $projectname,
                        ];
                    })
                    ->escapeColumns('edit')
                    ->rawColumns(['action','edit'])
                    ->make();     
        }
    }

I have used Left Join Query. Now the problem is that Yajra DataTable search bar is not working. Its neither giving any error nor the search result.

Need a solution every thing are fine in code but i don't know why is not working,


Solution

  • You can search using the filter() method. For ex:

    ->filter(function ($query) {
        if ($keyword = $this->request->input('search.value')) {
            return $query->whereHas('projects', function ($subQuery) use ($keyword) {
                return $subQuery->where('project_name', 'LIKE', '%' . $keyword . '%');
            });
        }
        return $query;
    })
    

    Customize your filtering. See: https://yajrabox.com/docs/laravel-datatables/master/filter-column

    Here is an example from my own project:

    ->filter(function ($query) {
        if ($keyword = $this->request->input('search.value')) {
            return $query
                ->whereHas('address', function ($subQuery) use ($keyword) {
                    return $subQuery
                        ->where('name', 'LIKE', '%' . $keyword . '%')
                        ->orWhere('email', 'LIKE', '%' . $keyword . '%')
                        ->orWhere('phone', 'LIKE', '%' . $keyword . '%');
                })
                ->orWhereHas('user', function ($subQuery) use ($keyword) {
                    return $subQuery
                        ->where('name', 'LIKE', '%' . $keyword . '%')
                        ->orWhere('email', 'LIKE', '%' . $keyword . '%')
                        ->orWhere('phone', 'LIKE', '%' . $keyword . '%');
                })
                ->orWhere('code', 'LIKE', '%' . $keyword . '%');
        }
    
        return $query;
    });