cuongnx/laravel-repo-service-generator
最新稳定版本:v2.0.6
Composer 安装命令:
composer require cuongnx/laravel-repo-service-generator
包简介
Generate repository-service structure for Laravel with interface and binding
README 文档
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 thePostrepository. -
app/Repositories/PostRepository.php
→ Repository class implementing data access logic forPost.
ExtendsBaseRepositoryand implementsPostRepositoryInterface. -
app/Services/Contracts/PostServiceInterface.php
→ Interface defining service-level business methods forPost. -
app/Services/PostService.php
→ Service class implementing business logic related toPost.
ExtendsBaseServiceand 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 yourCustomservice 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
统计信息
- 总下载量: 53
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-07-29