mrjmpl3 / laravel-restful-helper
Laravel Helper to Restful projects
Installs: 1 248
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: ^7.3
- illuminate/database: ^5.5|^6.0|^7.0
- illuminate/support: ^5.5|^6.0|^7.0
This package is auto-updated.
Last update: 2022-06-15 02:14:38 UTC
README
Install
Via Composer
$ composer require mrjmpl3/laravel-restful-helper
Usage
This packages make queries depends of the request, like GraphQL.
Requests
- Filter data: /product?column=value&column2=value2
- Sort data: /product?sort=-column1,column2
- With the negative prefix = desc
- Without the negative prefix = asc
- Fields o Select data: /product?fields=column1,column2,column3,column4
- Paginate and Per Page: /product?paginate=true&per_page=5
- Embed: /product?embed=relationfunction
Code
To Collection
// Create a simple instance of model where you want apply the queries
$model = new Product();
$responseHelper = new ApiRestHelper($model);
// The method 'toCollection' return a collection with all data filtered
$response = $responseHelper->toCollection();
To Model
// Create a simple instance of model where you want apply the queries
$model = new Product();
$responseHelper = new ApiRestHelper($model);
// The method 'toModel' return a model with all data filtered
$response = $responseHelper->toModel();
From Builder to Collection
// Important! Don't close the query with get() or paginate()
$query = Product::where('state', = , 1);
$responseHelper = new ApiRestHelper($query);
// The method 'toCollection' return a collection with all data filtered
$response = $responseHelper->toCollection();
Relations
-
In model, add array like next example:
public $apiAcceptRelations = [ 'post' ];
Where 'post' is the function name of relation
-
In the API Resources, use the function embed
public function toArray($request) { $embed = (new ApiRestHelper)->getEmbed(); return [ 'id' => $this->id, 'name' => $this->name, $this->mergeWhen(array_key_exists('post', $embed), [ 'post' => $this->getPostResource($embed), ]), 'created_at' => $this->created_at, 'updated_at' => $this->updated_at, ]; } private function getPostResource($embedRequest) { $postResource = NULL; if (array_key_exists('local', $embed)) { $postRelation = $this->local(); $fieldsFromEmbed = (new ApiRestHelper($postRelation->getModel()))->getEmbedField('post'); if(!empty($fieldsFromEmbed)) { $postResource = new PostResource($postRelation->select($fieldsFromEmbed)->first()); } else { $postResource = new PostResource($postRelation->first()); } } return $postResource; }
Transformers
- In model, add array like next example:
public $apiTransforms = [
'id' => 'code'
];
Where 'id' is the db column name , and 'code' is the column rename to response
- In the API Resources, use the array $apiTransforms
$apiHelper = new ApiRestHelper($this);
return [
$apiHelper->getKeyTransformed('id') => $this->id,
'name' => $this->name,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
- To used fields in API Resources , You can combine with transformers fields
$apiHelper = new ApiRestHelper($this);
return [
$this->mergeWhen($apiHelper->existInFields('id') && !is_null($this->id), [
$this->transforms['id'] => $this->id
]),
$this->mergeWhen($apiHelper->existInFields('name') && !is_null($this->name), [
'name' => $this->name
]),
]
Exclude Fields in Filter
- In model, add array like next example:
public $apiExcludeFilter = [
'id'
];
Where 'id' is the db column name to exclude
Change log
Please see CHANGELOG for more information on what has changed recently.
Security
If you discover any security related issues, please email jmpl3.soporte@gmail.com instead of using the issue tracker.
License
The MIT License (MIT). Please see License File for more information.