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
In this example, we will create a DataTable service class.
php artisan datatables:make Posts
This will create an PostsDataTable
class on 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();
}
}
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 a 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();
}
}
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.
In this example, we will pass a --action
option to set a custom path for the action column view.
php artisan datatables:make Posts --action="client.action"
If not provided, a default path will be used. It will needs to be changed thereafter.
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 needs to be manually changed thereafter.
DataTable scope is 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);
}
}