1. Go to this page and download the library: Download illuminatech/data-provider 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/ */
illuminatech / data-provider example snippets
use App\Models\Item;
use Illuminate\Http\Request;
use Illuminatech\DataProvider\DataProvider;
class ItemController extends Controller
{
public function index(Request $request)
{
$items = DataProvider::new(Item::class)
->filters([
'id',
'status' => 'status_id',
'search' => ['name', 'description'],
])
->sort(['id', 'name', 'status', 'created_at'])
->sortDefault('-id')
->paginate($request);
// ...
}
}
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminatech\DataProvider\DataProvider;
class ItemController extends Controller
{
public function index(Request $request)
{
$items = DataProvider::new(DB::table('items'))
->filters([
'id',
'status',
'search' => ['name', 'description'],
])
->sort(['id', 'name', 'status', 'created_at'])
->sortDefault('-id')
->paginate($request);
// ...
}
}
use App\Models\Item;
use Illuminatech\DataProvider\DataProvider;
$items = DataProvider::new(Item::class)
->filters(/* ... */)
->prepare($request) // applies all requested filters, returns `\Illuminate\Database\Eloquent\Builder` instance
->chunk(100, function ($items) {
// ...
});
use App\Models\Article;
use Illuminatech\DataProvider\DataProvider;
$query = Article::query()
->with('category');
$dataProvider = DataProvider::new($query)
->filters([
'status'
]);
$publishedArticles = $dataProvider->get(['filter' => ['status' => 'published']]); // has no side affect on `$query` instance
$draftArticles = $dataProvider->get(['filter' => ['status' => 'draft']]); // can process multiple requests in isolation
use App\Models\Item;
use Illuminate\Support\Facades\DB;
use Illuminatech\DataProvider\DataProvider;
$items = DataProvider::new(Item::query()) // instance of `\Illuminate\Database\Eloquent\Builder`
->filters(/* ... */)
->get();
$items = DataProvider::new( // all default conditions and eager loading should be applied to data source before passing it to data provider
Item::query()
->with('category')
->where('status', 'published')
)
->filters(/* ... */)
->get();
$items = DataProvider::new(Item::class) // invokes `Item::query()` automatically
->filters(/* ... */)
->get();
$items = DataProvider::new(DB::table('items')) // instance of `\Illuminate\Database\Query\Builder`
->filters(/* ... */)
->get();
$item = Item::query()->first();
$purchases = DataProvider::new($item->purchases()) // instance of `\Illuminate\Database\Eloquent\Relations\HasMany`
->filters(/* ... */)
->get();
use App\Models\Item;
use Illuminatech\DataProvider\DataProvider;
use Illuminatech\DataProvider\Filters\FilterExact;
$items = DataProvider::new(Item::class)
->filters([
'id', // short syntax, equals to `'id' => new FilterExact('id')`,
'status' => 'status_id', // short syntax, equals to `'status' => new FilterExact('status_id')`,
'search' => ['name', 'description'], // short syntax, equals to `'search' => new FilterSearch(['name', 'description'])`
'exact_name' => new FilterExact('name'), // pass filter instance directly
'callback' => function ($query, $name, $value) { // short syntax, equals to `'callback' => new FilterCallback(function ($query, $name, $value) {})`
$query->whereNotIn('status', $value);
},
])
->paginate($request);
use App\Models\Item;
use Illuminate\Support\Facades\DB;
use Illuminatech\DataProvider\DataProvider;
use Illuminatech\DataProvider\Filters\FilterExact;
// Eloquent processes dot attributes via relations:
$items = DataProvider::new(Item::class)
->filters([
'category_name' => new FilterExact('category.name'),
])
->get(['category_name' => 'programming']); // applies $itemQuery->whereHas('category', function() {...});
// Regular DB query consider dot attribute as 'table.column' specification:
$items = DataProvider::new(
DB::table('items')
->join('categories', 'categories.id', '=', 'items.category_id')
)
->filters([
'category_name' => new FilterExact('category.name'),
])
->get(['category_name' => 'programming']); // applies $itemQuery->where('category.name', '=', 'programming');
use App\Models\User;
use Illuminatech\DataProvider\DataProvider;
$dataProvider = DataProvider::new(User::class)
->sort([
'id', // short syntax, equals to `['id' => ['asc' => ['id' => 'asc'], 'desc' => ['id' => 'desc']]]`
'name' => [
'asc' => ['first_name' => 'asc', 'last_name' => 'asc'],
'desc' => ['first_name' => 'desc', 'last_name' => 'desc'],
],
])
->sortDefault('-id');
$users = $dataProvider->get(['sort' => 'id']); // applies 'ORDER BY id ASC'
$users = $dataProvider->get(['sort' => '-id']); // applies 'ORDER BY id DESC'
$users = $dataProvider->get(['sort' => 'name']); // applies 'ORDER BY first_name ASC, last_name ASC'
$users = $dataProvider->get([]); // applies default sort: 'ORDER BY id DESC'
use App\Models\User;
use Illuminatech\DataProvider\DataProvider;
$dataProvider = DataProvider::new(User::class, [
'sort' => [
'enable_multisort' => true,
],
])
->sort([
'id',
'first_name',
]);
$users = $dataProvider->get(['sort' => 'first_name,-id']); // applies 'ORDER BY first_name ASC, id DESC'
use App\Models\Item;
use Illuminatech\DataProvider\DataProvider;
$dataProvider = DataProvider::new(Item::class);
var_dump(count($dataProvider->paginate([])->items())); // outputs: 15
var_dump(count($dataProvider->paginate(['per-page' => 5])->items())); // outputs: 5
var_dump(count($dataProvider->paginate(['per-page' => 999999999])->items())); // throws a 'bad request' HTTP exception
use App\Models\Item;
use Illuminatech\DataProvider\DataProvider;
use Illuminatech\DataProvider\Includes\IncludeRelation;
$dataProvider = DataProvider::new(Item::class)
->ion('relation')`,
'published_comments' => new IncludeRelation('comments', function ($commentsQuery) {
$commentsQuery->where('status', '=', 'published');
}),
'category.group', // nested relation
use App\Models\Item;
use Illuminatech\DataProvider\DataProvider;
use Illuminatech\DataProvider\Fields\Field;
$dataProvider = DataProvider::new(Item::class)
->fields([
'id', // short syntax, equals to `'id' => new Field('id')`
'name' => new Field('name'),
'brief' => 'description', // short syntax, equals to `'brief' => new Field('description')`
'price',
]);
$item = $dataProvider->prepare(['fields' => 'id,name'])->first();
var_dump(isset($item->id)); // outputs `true`
var_dump(isset($item->name)); // outputs `true`
var_dump(isset($item->description)); // outputs `false`