PHP code example of raprmdn / laravel-inertia-datatables

1. Go to this page and download the library: Download raprmdn/laravel-inertia-datatables library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

raprmdn / laravel-inertia-datatables example snippets


return [
    'query_params' => [
        'search'    => 'search',
        'filters'   => 'filters',
        'column'    => 'col',
        'direction' => 'sort',
        'limit'     => 'limit',
    ],

    'date_format' => 'd-m-Y',

    'pagination' => [
        'default_per_page' => 10,
        'max_per_page'     => 100,
        'on_each_side'     => 1,
    ],
];

use App\Models\Post;
use Illuminate\Http\Request;
use Raprmdn\DataTables\Column;
use Raprmdn\DataTables\Facades\DataTable;

public function index(Request $request)
{
    $posts = DataTable::query(Post::query())
        ->with('author:id,name')
        ->columnDefinitions([
            Column::group(['title', 'excerpt'])->searchable(),
            Column::make('author', 'author.name')
                ->searchable()
                ->filterable()
                ->sortable(),
            Column::make('status')->filterable()->sortable(),
            Column::make('created_at')->dateRange()->sortable(),
        ])
        ->applyFilters($request->query('filters', []))
        ->applySort($request->string('col')->toString() ?: null)
        ->orderBy('created_at', 'desc')
        ->make();

    return response()->json($posts);
}

Column::make('author', 'user.name')
    ->searchable()
    ->filterable()
    ->sortable();

Column::make('name')->searchable();
Column::make('status')->filterable();
Column::make('created_at')->sortable()->dateRange();

Column::make('author', 'user.name')
    ->searchable()
    ->filterable('user.id')
    ->sortable();

Column::group([
    'title',
    'slug',
    'excerpt',
])->searchable()->sortable();

Column::group([
    'title',
    'author' => 'user.name',
])->searchable()->sortable();

->columnDefinitions([
    Column::group(['title', 'slug'])->searchable(),
    Column::make('author', 'user.name')->filterable(),
])

->applyFilters($request->query('filters', []))
->applySort($request->string('col')->toString() ?: null)

->columnDefinitions([
    Column::group(['name', 'email'])->searchable(),
    Column::make('organization', 'organization.name')->searchable(),
])

Column::make('contact', 'contact.name')->searchable();
Column::make('reason', 'reason.parent.name')->searchable();

->columnDefinitions([
    Column::make('status', 'status_code')->filterable(),
    Column::make('priority', 'priority.name')->filterable(),
])
->applyFilters($request->query('filters', []))

Column::make('verification', 'email_verified_at')
    ->filterable()
    ->filterAliases([
        'verified' => 'NOT NULL',
        'unverified' => 'NULL',
    ]);

Column::make(
    'email_notifications',
    'settings->notifications->email',
)->filterable();

Column::make('delivery_channel', 'channels')
    ->filterable()
    ->jsonContains()
    ->filterAliases([
        'mail' => 'email',
        'text' => 'sms',
    ]);

Column::make('created_at')->dateRange();

use Illuminate\Database\Eloquent\Builder;

Column::make('category_state')
    ->filterable()
    ->filterUsing(function (Builder $query, array $values): void {
        $categorized = in_array('categorized', $values, true);
        $uncategorized = in_array('uncategorized', $values, true);

        if ($categorized === $uncategorized) {
            return;
        }

        $categorized
            ? $query->has('categories')
            : $query->doesntHave('categories');
    });

->columnDefinitions([
    Column::make('name')->sortable(),
    Column::make('organization', 'organization.name')->sortable(),
    Column::make('created_at')->sortable(),
])
->applySort($request->string('col')->toString() ?: null)
->orderBy('created_at', 'desc')

Column::make('score')
    ->sortable()
    ->sortUsing(function ($query, string $direction): void {
        $query->orderBy('score', $direction);
    });

->columnDefinitions([
    Column::make('contact', 'contact.name')
        ->searchable()
        ->filterable()
        ->sortable(),
    Column::make('reason', 'reason.parent.name')
        ->searchable()
        ->filterable(),
])

->with(['contact.channel', 'priority'])
->withCount(['comments', 'tags'])

->with([
    'comments' => fn ($query) => $query->latest()->limit(5),
])
->withCount([
    'comments' => fn ($query) => $query->where('approved', true),
])

->perPage(25)
->make()

->type('collection')
->make()

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Raprmdn\DataTables\Column;
use Raprmdn\DataTables\Facades\DataTable;

public function index(Request $request)
{
    $query = DB::table('records')
        ->select('records.*')
        ->leftJoin(
            'organizations as organization',
            'organization.id',
            '=',
            'records.organization_id',
        );

    return DataTable::query($query)
        ->columnDefinitions([
            Column::make('record', 'records.name')
                ->searchable()
                ->sortable(),
            Column::make('organization', 'organization.name')
                ->searchable()
                ->sortable(),
            Column::make('status', 'records.status')->filterable(),
        ])
        ->applyFilters($request->query('filters', []))
        ->applySort($request->string('col')->toString() ?: null)
        ->orderBy('records.created_at', 'desc')
        ->make();
}

use App\Models\Ticket;
use Illuminate\Http\Request;
use Raprmdn\DataTables\Column;
use Raprmdn\DataTables\Facades\DataTable;

public function index(Request $request)
{
    $tickets = DataTable::query(Ticket::query())
        ->with(['priority', 'contact.channel', 'creator'])
        ->columnDefinitions([
            Column::group(['number', 'subject'])->searchable(),
            Column::make('customer', 'contact.name')
                ->searchable()
                ->sortable(),
            Column::make('priority', 'priority.name')
                ->filterable()
                ->sortable('priority.sla_minutes'),
            Column::make('status')->filterable()->sortable(),
            Column::make('created_by', 'creator.name')->filterable(),
            Column::make('created_at')->dateRange()->sortable(),
        ])
        ->applyFilters($request->query('filters', []))
        ->applySort($request->string('col')->toString() ?: null)
        ->make();

    return inertia('tickets/index', ['tickets' => $tickets]);
}

use App\Http\Resources\UserResource;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Raprmdn\DataTables\Column;
use Raprmdn\DataTables\Facades\DataTable;

Route::get('/users', function (Request $request) {
    $users = DataTable::query(User::query())
        ->columnDefinitions([
            Column::group(['name', 'email'])->searchable()->sortable(),
            Column::make('created_at')->dateRange()->sortable(),
        ])
        ->applyFilters($request->query('filters', []))
        ->applySort($request->string('col')->toString() ?: null)
        ->make();

    return UserResource::collection($users);
});

[$filters, $allowedFilters, $dateRanges] = DataTable::parseFilters(
    $request->query('filters', []),
    ['status' => 'status', 'created_at' => 'created_at'],
);

[$sort, $allowedSorts] = DataTable::parseSort(
    $request->query('col'),
    ['name' => 'name', 'created_at' => 'created_at'],
);

$result = DataTable::query($query)
    ->searchable(['name'])
    ->applyFilters($filters)
    ->allowedFilters($allowedFilters)
    ->applyDateRanges($dateRanges)
    ->applySort($sort)
    ->allowedSorts($allowedSorts)
    ->make();
bash
php artisan vendor:publish --tag=inertia-datatables-config
text
?search=raprmdn
text
?filters[]=status:published&filters[]=priority:high
text
?filters[]=verification:verified