Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

tomasosho's avatar

How to add export buttons to yajra/laravel-datatables?

My controller

public function mainindexat()
    {
        
        return view('attendancemain');
    }
    public function attendancemainList()
    {   
        $date = DB::table('attendance')->select('date')->get();
        $attendanceQuery = DB::table('attendance')
        ->select('department', DB::raw('DATE_FORMAT(`date`, "%Y-%b") as `month`'), 'name', DB::raw('count(present) AS days_present'), DB::raw('count(absent) AS days_absent'),)
        ->groupBy('department', DB::raw('MONTH(`date`)'))
        ->get();
        //$attendanceQuery = Attendance::query();
 
        $start_date = (!empty($_GET["start_date"])) ? ($_GET["start_date"]) : ('');
        $end_date = (!empty($_GET["end_date"])) ? ($_GET["end_date"]) : ('');
 
        if($start_date && $end_date){
 
         $start_date = date('Y-m-d', strtotime($start_date));
         $end_date = date('Y-m-d', strtotime($end_date));
 
         $attendanceQuery->whereRaw("date(attendance.date) >= '" . $start_date . "' AND date(attendance.date) <= '" . $end_date . "'");
        }

        $attendance = DB::table('attendance')
        ->select('department', DB::raw('DATE_FORMAT(`date`, "%Y-%b") as `month`'), 'name', DB::raw('count(present) AS days_present'), DB::raw('count(absent) AS days_absent'),)
        ->groupBy('department', DB::raw('MONTH(`date`)'))
        ->get();
        return datatables()->of($attendance)
            ->make(true);
    }

    public function html()
    {
        return $this->builder()
                    ->columns($this->getColumns())
                    ->parameters([
                        'buttons' => ['excel'],
                    ]);
    }

my route

Route::get('attendancemain', 'QueryController@mainindexat');
Route::get('attendancemain-list', 'QueryController@attendancemainList'); 
Route::post('attendancemain/export', 'QueryController@html');

my view

<form action="attendancemain/export" method="post">
   {{ csrf_field() }}
      <input type="submit" class="btn btn-primary" value="Export">
   </form>
0 likes
1 reply
dan3460's avatar

What i normally do add buttons is to use the addColumn function of DataTables, here is a sample that returns a couple of buttons and a link to a picture:

public function getAlbums(Request $request)
{
    $albums = Albums::where('users_id', Auth::user()->id);

    return DataTables::of($albums)
        ->addColumn('actions', function ($albums) {
            return '<a href="/albumsDetail/manageAlbum/' . $albums->id . '" class="btn btn-xs btn-success">' . trans('buttons.Edit') . '</a>' .
                '<form action="/albums/' . $albums->id . '" method="post">' . csrf_field() . ' ' . method_field('DELETE') . '<button type="submit" class="btn btn-xs btn-danger">' . trans('buttons.Delete') . '</button></form>';
        })
        ->addColumn('cover', function ($albums) {
            return '<img src="' . url('storage/' . $albums->cover()) . '" alt="Not Selected" class="img-thumbnail" width=100>';
        })
        ->addColumn('pictures', function ($albums) {
            return $albums->pictures()->count();
        })
        ->addColumn('selectFamily', function ($albums) {
            return $albums->family ? "Yes" : "No";
        })
        ->addColumn('selectPublic', function ($albums) {
            return $albums->public ? "Yes" : "No";
        })
        ->rawColumns(['actions', 'cover'])
        ->make(true);
}

Please or to participate in this conversation.