-
Notifications
You must be signed in to change notification settings - Fork 1
Models
The package includes an abstract base model for calling your API gateway.
Extend Kroderdev\LaravelMicroserviceCore\Models\Model to create a resource model.
use Kroderdev\LaravelMicroserviceCore\Models\Model as ApiModel;
class User extends ApiModel
{
protected $fillable = ['id', 'name'];
}By default the endpoint is the plural kebab case of the class name (e.g. /users).
Override the $endpoint property to customize it:
class Article extends ApiModel
{
protected static string $endpoint = '/posts';
}Run the command with --remote to create a model that already extends the package base model:
php artisan make:model Order --remote-
all()– fetch a collection of models -
find($id)– retrieve a model by its key -
paginate($perPage = 15)– return a paginator -
create(array $attributes)– create via the API -
save()– update or create -
delete()– remove via the API -
refresh()– reload from the API
The model already uses ApiModelTrait which provides helpers like fromApiResponse,
fromCollection and fromPaginatedResponse.
User models that store roles and permissions can also use the HasAccess trait
to gain hasRole, hasPermissionTo and related helpers.
By default, models are configured to fetch data directly from the ApiGateway. Ensure that your ApiGateway is properly set up and configured so that models can seamlessly interact with remote resources. This integration allows your models to retrieve and manipulate data consistently across your microservices architecture. For more details, see [ApiGateway].
Models can automatically hydrate nested relations by defining the $apiRelations property. It maps relation names from the API to local model classes:
use Kroderdev\LaravelMicroserviceCore\Models\Model as ApiModel;
class Post extends ApiModel
{
protected $fillable = ['id', 'title', 'comments'];
protected static array $apiRelations = [
'comments' => Comment::class,
];
}For nested structures or custom property names you can provide a callback that receives the relation value and must return a collection or model instance:
use Kroderdev\LaravelMicroserviceCore\Models\Model as ApiModel;
class Post extends ApiModel
{
protected $fillable = ['id', 'title', 'comments'];
protected static array $apiRelations = [
'comments' => Comment::class,
'author' => 'mapAuthor',
'likes' => 'mapLikes',
];
protected static function mapAuthor(array $data): User
{
return User::fromApiResponse($data['profile']);
}
protected static function mapLikes(array $data): Collection
{
return collect($data)->map(function ($item) {
return new Like($item);
});
}
}The mapping is applied when calling fromApiResponse, fromCollection or fromPaginatedResponse.
Maintained by @KroderDev
💬 Feedback? Open an issue
Last updated: July 1, 2025