1. Go to this page and download the library: Download mblarsen/laravel-repository 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/ */
mblarsen / laravel-repository example snippets
// Using Laravel's resolve() helper
$repository = resolve(Repository::class)->setModel(Post::class);
// Using static factory
$repository = Repository::for(Post::class);
public function index(Repository $repository)
{
return $repository->setModel(Post::class)->all();
}
public function index(PostRepository $repository)
{
return $repository->all();
}
$repository->setAllowedWith(['comments']);
$relation->setDefaultWith(['comments']);
// Search on model property
title=cra
// Search on model property exact match
code_name!=wowcrab
// Seacch on relation property
address.city=mass
// Search in full name
first_name+middle_name+last_name=cra
// Search in both title, name, and email
title|name|email=cra
public function index(UserRepository $repository)
{
$repository->setContext(
ArrayResourceContext::create(
$repository->getContext()->toArray()
)
->merge([
'filters' => ['status' => 'approved']
])
->exclude(['search_by'])
);
}
class PostRepository extends Repository
{
// We serve you Posts
protected $model = Post::class;
// The client can request to omments'];
// We change the default sort key to created_at ...
protected $default_sort_by = 'created_at';
// ... in descending order
protected $default_sort_order = 'desc';
// We override modelQuery to ensure only
// published posts will be returned
protected function modelQuery($query = null)
{
// It is perfectly okay to not invoke the parent.
// It simly defaults to an empty query of the current
// model. These are identical:
//
// $query = parent::modelQuery($query);
// $query = $query ?: Post::query()
$query = parent::modelQuery($query);
$query->whereNotNul('published_at');
return $query;
}
}
public function index(Repository $repository)
{
$only_published = Post::query()->whereNotNul('published_at');
$repository
->setModel(Post::class)
->setDefaulSort('created_at', 'desc')
->setAllowedWith(['ads', 'comments'])
->setDefaultWith(['comments'])
;
return $repository->all($only_published);
}
public function index(PostRepository $repository)
{
return $repository->all();
}
// using base repository
$repository->setResource(UserResource::class);
// or extending
protected $resource = UserResource::class;
$repository->setResource(UserResource::class, UserResourceCollection::class);
// or in class
protected $resource_collection = UserResourceCollection::class
public function register()
{
$this->app->resolving(RequestResourceContext::class, function ($context) {
$context->mapKeys([
'filters' => 'filter'
'sort_by' => 'order_by',
'sort_order' => 'direction',
'per_page' => 'take',
]);
// or if you simply prefer camelCase
$context->mapKeys([
'sort_by' => 'sortBy',
'sort_order' => 'sortOrder',
'per_page' => 'perPage',
]);
});
}
public function index(UserRepository $user_repository)
{
// To get only users with status 'pending'
$query = User::where('status', 'pending');
$users = $user_repository->all($query);
// Of course in this simple case we could have achived the same using a
// filter: GET /users?filters[status]=pending
}
protected function register()
{
$this->default_list_column = function ($model) {
return $model->full_name;
};
}