cuongnx / laravel-repo-service-generator
Generate repository-service structure for Laravel with interface and binding
Installs: 8
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/cuongnx/laravel-repo-service-generator
Requires
- php: >=8.1
- illuminate/support: ^11.0 || ^12.0
README
โ Generate clean Repository-Service structure with interfaces, bindings, and optional MongoDB support for Laravel 11 and 12+
This library provides a powerful artisan command set to generate and manage Repository-Service architecture with optional binding, base classes, and multi-model support. It helps you follow a clean, testable architecture in Laravel projects.
๐งพ Version Information
Library Version | v1.0.0 |
---|---|
Laravel | ^11.0, ^12.0 |
PHP Version | >= 8.1 |
MongoDB Support | Optional (--type=m ) via mongodb/laravel-mongodb |
๐ Table of Contents
- Features
- Installation
- Base Structure Generation
- Full Structure Generation
- Create Simple Service
- Bindings
- Unbind
- Remove Structures
- BaseService Methods
- Service Usage
- Folder Structure
- Donate
- Contact
- License
โ๏ธ โ Features
- Generate Repository, Service, Interface automatically.
- Optional Model generation (Eloquent or MongoDB).
- Auto-bind/unbind to
AppServiceProvider
. - Middleware-safe service usage.
- Reversible file generation (remove struct).
- Extendable base classes.
- Fast CLI operations.
โ๏ธ Installation
composer require cuongnx/laravel-repo-service-generator
๐ฆ For MongoDB support:
composer require mongodb/laravel-mongodb
๐ฆ Base Structure Generation
Create base repository/service interfaces and classes:
php artisan cuongnx:make-base
Options:
Flag | Description |
---|---|
--f |
Overwrite existing files |
--force |
Alias for --f |
This command will generate the following files and structure:
app/
โโโ Repositories/
โ โโโ Contracts/
โ โ โโโ BaseRepositoryInterface.php
โ โโโ BaseRepository.php
โโโ Services/
โโโ Contracts/
โ โโโ BaseServiceInterface.php
โโโ BaseService.php
File Descriptions:
-
app/Repositories/Contracts/BaseRepositoryInterface.php
โ Interface that defines common methods for a repository. -
app/Repositories/Eloquent/BaseRepository.php
โ Implements basic data access methods (CRUD, conditions, pagination...). -
app/Services/Contracts/BaseServiceInterface.php
โ Interface that defines common methods for a service layer. -
app/Services/BaseService.php
โ Implements business logic on top of the repository layer.
๐งฑ Create Full Structure (Model + Repo + Service)
php artisan cuongnx:make-struct Post
Options:
Flag | Description |
---|---|
--model , --m |
Also generate the model class |
--type= |
Model type: d = Eloquent (default), m = MongoDB |
--no-bind |
Skip automatic binding in AppServiceProvider |
--f , --force |
Overwrite existing files |
๐ Example with MongoDB:
php artisan cuongnx:make-struct Product --m --type=m
This command will generate the following files and structure:
app/
โโโ Models/
โ โโโ Post.php
โโโ Repositories/
โ โโโ Contracts/
โ โ โโโ PostRepositoryInterface.php
โ โโโ PostRepository.php
โโโ Services/
โโโ Contracts/
โ โโโ PostServiceInterface.php
โโโ PostService.php
File Descriptions:
-
app/Models/Post.php
โ The Eloquent or MongoDB model class forPost
. -
app/Repositories/Contracts/PostRepositoryInterface.php
โ Interface defining methods specific to thePost
repository. -
app/Repositories/PostRepository.php
โ Repository class implementing data access logic forPost
.
ExtendsBaseRepository
and implementsPostRepositoryInterface
. -
app/Services/Contracts/PostServiceInterface.php
โ Interface defining service-level business methods forPost
. -
app/Services/PostService.php
โ Service class implementing business logic related toPost
.
ExtendsBaseService
and implementsPostServiceInterface
.
๐ If --no-bind
is not provided, the following bindings will be added to AppServiceProvider
:
$this->app->bind( \App\Repositories\Contracts\PostRepositoryInterface::class, \App\Repositories\PostRepository::class ); $this->app->bind( \App\Services\Contracts\PostServiceInterface::class, \App\Services\PostService::class );
๐งฑ Create Simple Service & Interface (Without implement BaseService)
php artisan cuongnx:make-service Custom
Options:
Flag | Description |
---|---|
--no-bind |
Skip automatic binding in AppServiceProvider |
--f , --force |
Overwrite existing files |
This command will generate the following files and structure:
app/
โโโ Services/
โโโ Contracts/
โ โโโ CustomServiceInterface.php
โโโ CustomService.php
File Descriptions:
-
app/Services/Contracts/CustomServiceInterface.php
โ Defines custom methods for yourCustom
service logic. -
app/Services/CustomService.php
โ Contains business logic related toCustom
, implementsCustomServiceInterface
.
๐ Bindings
Bind both repository & service:php artisan cuongnx:bind-model User
Options:
Flag | Description |
---|---|
--only=repo |
Bind only repository |
--only=service |
Bind only service |
Bind individually:
php artisan cuongnx:bind-repo User php artisan cuongnx:bind-service User
โ Unbind Bindings
```bash php artisan cuongnx:unbind-model User ```Options:
Flag | Description |
---|---|
--only=repo |
Unbind only repository |
--only=service |
Unbind only service |
Or directly:
php artisan cuongnx:unbind-repo User
php artisan cuongnx:unbind-service User
๐งน Remove Structures
Remove all (repo + service + optional model):php artisan cuongnx:remove-struct Post --model
Options:
Flag | Description |
---|---|
--model , -m |
Also remove model |
--no-unbind |
Do not unbind from AppServiceProvider |
Remove only service:
php artisan cuongnx:remove-service Post
๐งฉ BaseService Methods
All services extend `BaseService` and automatically gain access to these common data methods.๐ Read Methods
Method | Description |
---|---|
getAll(array $relations = []) |
Get all records with optional relationships |
get(?array $fields = null, array $relations = []) |
Get all records with selected fields & relationships |
find($id, ?array $fields = null, array $relations = []) |
Find by ID |
findBy(string $key, $value, ?array $fields = null, array $relations = []) |
Find a record by key-value |
findByAttributes(array $conditions, ?array $fields = null, array $relations = []) |
Find a single record by multiple attributes |
getBy(string $key, $value, ?array $fields = null, array $relations = []) |
Get multiple records by key-value |
getByAttributes(array $conditions, ?array $fields = null, array $relations = []) |
Get multiple records by attributes |
withTrashed(array $conditions = [], ?array $fields = null, array $relations = []) |
Get including soft-deleted |
onlyTrashed(array $conditions = [], ?array $fields = null, array $relations = []) |
Get only soft-deleted |
๐ Paginate
Method | Description |
---|---|
paginate(int $perPage = 15, array $conditions = [], ?array $fields = null, array $relations = []) |
Paginated list with filters and relationships |
โ Existence Checks
Method | Description |
---|---|
existsBy(string $field, $value): bool |
Check if a value exists for a field |
existsByAttributes(array $conditions): bool |
Check existence by multiple attributes |
๐ Create/Update
Method | Description |
---|---|
create(array $data) |
Create a new record |
update($id, array $data) |
Update by ID |
updateFields($model, array $fields, array $except = []) |
Update specific fields on a model |
createOrUpdate(array $attributes, array $values = [], array $checkFields = []) |
Create or update a record by match conditions |
โ Delete / Restore
Method | Description |
---|---|
delete($id) |
Soft delete by ID |
deleteBy(array $conditions) |
Soft delete by conditions |
restore($id): bool |
Restore soft-deleted record |
forceDelete($id): bool |
Permanently delete record |
๐ง Service Usage Example
use App\Services\UserService; class PostService extends BaseService { public function __construct(protected UserService $userService) {} protected function getRepository() { return $this->postRepo; } public function assignAuthor($postId, $userId) { $user = $this->userService->find($userId); $post = $this->find($postId); $post->author_id = $user->id; $post->save(); return $post; } }
Controller:
use App\Services\PostService; class PostController extends Controller { public function __construct(protected PostService $postService) {} public function index() { return $this->postService->getAll(); } }
๐ Folder Structure
app/
โโโ Repositories/
โ โโโ Contracts/
โ โ โโโ BaseRepositoryInterface.php
โ โ โโโ UserRepositoryInterface.php
โ โ โโโ PostRepositoryInterface.php
โ โโโ Eloquent/
โ โโโ BaseRepository.php
โ โโโ UserRepository.php
โ โโโ PostRepository.php
โโโ Services/
โ โโโ Contracts/
โ โ โโโ BaseServiceInterface.php
โ โ โโโ CustomServiceInterface.php
โ โ โโโ PostServiceInterface.php
โ โ โโโ BaseServiceInterface.php
โ โโโ BaseService.php
โ โโโ CustomService.php
โ โโโ UserService.php
โ โโโ PostService.php
โโโ Models/
โโโ User.php
โโโ Post.php
๐งฉ Extending BaseService
You can override or extend any of these methods in your custom service classes.
๐ Donate
If you find this package useful, feel free to support the development:โ Coffee & Support
๐ฆ Bank (VIETQR)
Account Holder: NGUYEN XUAN CUONG
Account Number:1368686856
Bank: Techcombank
๐ฌ Contact
- Email: xuancuong220691@gmail.com
๐ License
- MIT License ยฉ Cuong Nguyen