Skip to content
Icon

WARNING You're browsing the documentation for an upcoming version of Laravel DataTables. The documentation and features of this release are subject to change.

DataTable Console Commands

Introduction

Artisan is the command-line interface included with Laravel. It provides a number of helpful commands that can assist you while you build your application. To view a list of all available Artisan commands, you may use the list command:

php artisan list

Creating a DataTable service class

In this example, we will create a DataTable service class.

php artisan datatables:make Posts

This will create a PostsDataTable class in the app\DataTables directory.

namespace App\DataTables;
 
use App\User;
use Yajra\DataTables\Services\DataTable;
 
class PostsDataTable extends DataTable
{
/**
* Build DataTable class.
*
* @return \Yajra\DataTables\DataTableAbstract
*/
public function dataTable()
{
return $this->datatables
->eloquent($this->query())
->addColumn('action', 'path.to.action.view');
}
 
/**
* Get the query object to be processed by dataTables.
*
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Query\Builder|\Illuminate\Support\Collection
*/
public function query()
{
$query = User::query();
 
return $this->applyScopes($query);
}
 
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->columns($this->getColumns())
->ajax('')
->addAction(['width' => '80px'])
->parameters($this->getBuilderParameters());
}
 
/**
* Get columns.
*
* @return array
*/
protected function getColumns()
{
return [
'id',
// add your columns
'created_at',
'updated_at',
];
}
 
/**
* Get filename for export.
*
* @return string
*/
protected function filename()
{
return 'posts_' . time();
}
}

Model Option

In this example, we will pass a --model option to set the model to be used by our DataTable.

php artisan datatables:make Posts --model

This will generate an App\DataTables\PostsDataTable class that uses App\Post as the base model for our query. The exported filename will also be set to posts_(timestamp).

<?php
 
namespace App\DataTables;
 
use App\Post;
use Yajra\DataTables\Services\DataTable;
 
class PostsDataTable extends DataTable
{
/**
* Build DataTable class.
*
* @return \Yajra\DataTables\DataTableAbstract
*/
public function dataTable()
{
return $this->datatables
->eloquent($this->query())
->addColumn('action', 'path.to.action.view');
}
 
/**
* Get the query object to be processed by dataTables.
*
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Query\Builder|\Illuminate\Support\Collection
*/
public function query()
{
$query = Post::query();
 
return $this->applyScopes($query);
}
 
/**
* Optional method if you want to use html builder.
*
* @return \Yajra\DataTables\Html\Builder
*/
public function html()
{
return $this->builder()
->columns($this->getColumns())
->ajax('')
->addAction(['width' => '80px'])
->parameters($this->getBuilderParameters());
}
 
/**
* Get columns.
*
* @return array
*/
protected function getColumns()
{
return [
'id',
// add your columns
'created_at',
'updated_at',
];
}
 
/**
* Get filename for export.
*
* @return string
*/
protected function filename()
{
return 'posts_' . time();
}
}

Model Namespace Option

In this example, we will pass a --model-namespace option to set the model namespace to be used by our DataTable.

php artisan datatables:make Posts --model-namespace="Models\Client"

It will implicitly activate --model option and override the model parameter in datatables-buttons config file. This will allow to use a non-standard namespace if front-end and back-end models are in separate namespace for example.

Action Option

In this example, we will use the --action option to set a custom path for the action column view.

php artisan datatables:make Posts --action="client.action"

If no path is provided, a default path will be used. It will need to be changed thereafter.

Columns Option

In this example, we will pass a --columns option to set the columns to be used by our DataTable.

php artisan datatables:make Posts --columns="id,title,author"

If not provided, a default set of columns will be used. It will need to be manually changed thereafter.

Creating a DataTable Scope service class

DataTable scope is a class that we can use to limit our database search results based on the defined query scopes.

php artisan datatables:scope ActiveUser

This will create an ActiveUser class on app\DataTables\Scopes directory.

namespace App\DataTables\Scopes;
 
use Yajra\DataTables\Contracts\DataTableScopeContract;
 
class ActiveUser implements DataTableScopeContract
{
/**
* Apply a query scope.
*
* @param \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder $query
* @return mixed
*/
public function apply($query)
{
return $query->where('active', true);
}
}