I use all in one installer package yajra/laravel-datatables:^1.0 datatable works fine but buttons are not created.
Resulting Javascript also seems fine.
(function(window,$){window.LaravelDataTables=window.LaravelDataTables||{};window.LaravelDataTables["dataTableBuilder"]=$("#dataTableBuilder").DataTable({"serverSide":true,"processing":true,"ajax":{"url":"","type":"GET","data":function(data) {
for (var i = 0, len = data.columns.length; i < len; i++) {
if (!data.columns[i].search.value) delete data.columns[i].search;
if (data.columns[i].searchable === true) delete data.columns[i].searchable;
if (data.columns[i].orderable === true) delete data.columns[i].orderable;
if (data.columns[i].data === data.columns[i].name) delete data.columns[i].name;
}
delete data.search.regex;}},"columns":[{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"name":"name","data":"name","title":"Name","orderable":true,"searchable":true},{"name":"email","data":"email","title":"Email","orderable":true,"searchable":true},{"name":"created_at","data":"created_at","title":"Created At","orderable":true,"searchable":true},{"name":"updated_at","data":"updated_at","title":"Updated At","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Action","render":null,"orderable":false,"searchable":false,"width":"150px"}],"dom":"Bfrtip","order":[[0,"desc"]],"buttons":["create","export","print","reset","reload"]});})(window,jQuery);
Better inspect your console for any error logs that can give us a hint on what's causing the issue. My guess is there are some missing scripts that you may have forgot to include?
No Console errors
Files in use
UsersDataTable.php
DatatablesController.php
master.blade.php
welcome.blade.php
UsersDataTable.php
namespace App\DataTables;
use App\User;
use Yajra\DataTables\Services\DataTable;
class UsersDataTable extends DataTable
{
/**
* Build DataTable class.
*
* @param mixed $query Results from query() method.
* @return \Yajra\DataTables\DataTableAbstract
*/
public function dataTable($query)
{
return datatables($query)
->addColumn('action', 'useraction');
}
/**
* Get query source of dataTable.
*
* @param \App\User $model
* @return \Illuminate\Database\Eloquent\Builder
*/
public function query(User $model)
{
return $model->newQuery()->select('id', 'name', 'email','created_at', 'updated_at');
}
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->columns($this->getColumns())
->minifiedAjax()
->addAction(['width' => '150px'])
->parameters($this->getBuilderParameters());
}
/**
* Get columns.
*
* @return array
*/
protected function getColumns()
{
return [
'id',
'name',
'email',
'created_at',
'updated_at'
];
}
/**
* Get filename for export.
*
* @return string
*/
protected function filename()
{
return 'Users_' . date('YmdHis');
}
}
DatatablesController.php
namespace App\Http\Controllers;
use App\DataTables\UsersDataTable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class DatatablesController extends Controller
{
/**
* Display index page and process dataTable ajax request.
*
* @param \App\DataTables\UsersDataTable $dataTable
* @return \Illuminate\Http\JsonResponse|\Illuminate\View\View
*/
public function index(UsersDataTable $dataTable)
{
return $dataTable->render('welcome');
}
/**
* Show create user page.
*
* @return \BladeView|bool|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function create()
{
return view('create');
}
}
master.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
@section('title')
<title>Hello World</title>
@show
<!-- Styles -->
<!-- Bootstrap CSS -->
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css"/>
<link rel="stylesheet" type="text/css" href="////cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.min.css"/>
<!-- Scripts -->
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
</script>
</head>
<body>
<div id="app">
<div class="container">
<div class="row">
<div class="col-sm-12">
@yield('content')
</div>
</div>
</div>
</div>
<!-- Scripts -->
<!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<!-- DataTables -->
<script type="text/javascript" src="//cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
@stack('scripts')
</body>
welcome.blade.php
@extends('master')
@section('content')
<div class="tab-content">
<div >
<h2>Laravel Datatable </h2>
<div class="panel panel-default">
<div class="panel-body">
{!! $dataTable->table() !!}
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
{!! $dataTable->scripts() !!}
@endpush
You need to include the buttons scripts. See https://yajrabox.com/docs/laravel-datatables/master/buttons-starter for ref.
<script src="https://cdn.datatables.net/buttons/1.0.3/js/dataTables.buttons.min.js"></script>
<script src="/vendor/datatables/buttons.server-side.js"></script>
BTW, don't forget to publish the buttons assets.
php artisan vendor:publish --tag=datatables-buttons
Thanks, works perfectly after publishing.
Most helpful comment
Thanks, works perfectly after publishing.