The fastest way to make a powerful JSON:API compatible Rest API with Laravel.
MIT License
Bot releases are visible (Hide)
Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
File
and Image
fields (#334)Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
pivots
object.related
of the repository.Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
get_class() expects parameter 1 to be object, null given
Published by binaryk almost 4 years ago
MorphOne
field.Published by binaryk almost 4 years ago
belongsTo
relationship:Sometimes you may need to sort by a belongsTo
relationship. This become a breeze with Restify. Firstly you have to
instruct your sort to use a relationship:
// PostRepository
use Binaryk\LaravelRestify\Fields\BelongsTo;
use Binaryk\LaravelRestify\Filters\SortableFilter;
public static function sorts(): array
{
return [
'users.name' => SortableFilter::make()
->setColumn('users.name')
->usingBelongsTo(
BelongsTo::make('user', 'user', UserRepository::class),
)
];
}
Make sure that the column is fully qualified (include the table name).
The request could look like:
GET: /api/restify/posts?sort=-users.name
This will return all posts, sorted descending by users name.
Published by binaryk almost 4 years ago
Support for integer
column type for the artisan restify:stub
command.
Support for managing related entities via Eager fields. For example, if you want to have in relationships an BelongsTo
field:
//PostRepository.php
public static function getRelated()
{
return [
'owner' => BelongsTo::make('owner', 'owner', UserRepository::class),
];
}
Then you can get it via related as usual:
/api/restify/posts?related=owner
And the returned object in the relationships will be formatted using UserRepository fields, so you can attach policies and permissions for specific fields in the repository itself.
Published by binaryk almost 4 years ago
'repository' => {
'key' => 'posts',
'url' => 'api/restify/posts',
'display_key' => 'id',
'title' => 'Posts'
}
Published by binaryk almost 4 years ago
You can implement a match filter definition, and specify for example related repository:
public static $match = [
'title' => 'string',
'user_id' => MatchFilter::make()
->setType('int')
->setRelatedRepositoryKey(UserRepository::uriKey()),
];
When you will list this filter (with posts/filters?only=matches
), you will get:
{
"class": "Binaryk\LaravelRestify\Filters\MatchFilter"
"key": "matches"
"type": "string"
"column": "title"
"options": []
},
{
"class": "Binaryk\LaravelRestify\Filters\MatchFilter"
"key": "matches"
"type": "int"
"column": "user_id"
"options": []
"related_repository_key": "users"
"related_repository_url": "//users"
}
Published by binaryk almost 4 years ago
fromRelation
and fromBuilder
methods for the repository cast. abstract public static function fromBuilder(RestifyRequest $request, Builder $builder, Repository $repository): Collection;
abstract public static function fromRelation(RestifyRequest $request, Relation $relation, Repository $repository): Collection;
Published by binaryk almost 4 years ago
restify.casts.related
property. The default related cast is Binaryk\LaravelRestify\Repositories\Casts\RelatedCast
.The cast class should extends the Binaryk\LaravelRestify\Repositories\Casts\RepositoryCast
abstract class.
Copy the default config to your restify.php
configuration:
'casts' => [
/*
|--------------------------------------------------------------------------
| Casting the related entities format.
|--------------------------------------------------------------------------
|
*/
'related' => \Binaryk\LaravelRestify\Repositories\Casts\RelatedCast::class,
],
Published by binaryk almost 4 years ago
Published by binaryk almost 4 years ago
php artisan restify:stub users --count=10
now support relationsAnd much much more, see official documentation.
Published by binaryk almost 4 years ago
Psalm comments.
Published by binaryk about 4 years ago