DataTables Editor Command

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

Editor Command

php artisan datatables:editor {name}

Editor Command Options

Creating a DataTables Editor class

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

php artisan datatables:editor Posts

This will create a PostsDataTableEditor class on app\DataTables directory.

namespace App\DataTables;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rule;
use Yajra\DataTables\DataTablesEditor;
use App\User;

class PostsDataTableEditor extends DataTablesEditor
{
    protected $model = User::class;

    /**
     * Get create action validation rules.
     *
     * @return array
     */
    public function createRules()
    {
        return [
            'email' => 'required|email',
            'name'  => 'required',
        ];
    }

    /**
     * Get edit action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function editRules(Model $model)
    {
        return [
            'email' => 'sometimes|required|email|' . Rule::unique($model->getTable())->ignore($model->getKey()),
            'name'  => 'sometimes|required',
        ];
    }

    /**
     * Get remove action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function removeRules(Model $model)
    {
        return [];
    }
}

Model Option

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

php artisan datatables:editor 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).

namespace App\DataTables;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Validation\Rule;
use Yajra\DataTables\DataTablesEditor;
use App\Post;

class PostsDataTableEditor extends DataTablesEditor
{
    protected $model = Post::class;

    /**
     * Get create action validation rules.
     *
     * @return array
     */
    public function createRules()
    {
        return [
            'email' => 'required|email',
            'name'  => 'required',
        ];
    }

    /**
     * Get edit action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function editRules(Model $model)
    {
        return [
            'email' => 'sometimes|required|email|' . Rule::unique($model->getTable())->ignore($model->getKey()),
            'name'  => 'sometimes|required',
        ];
    }

    /**
     * Get remove action validation rules.
     *
     * @param Model $model
     * @return array
     */
    public function removeRules(Model $model)
    {
        return [];
    }
}

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:editor Posts --model-namespace="Entities"

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.