定制 cuongnx/laravel-repo-service-generator 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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

  • 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 for Post.

  • app/Repositories/Contracts/PostRepositoryInterface.php
    → Interface defining methods specific to the Post repository.

  • app/Repositories/PostRepository.php
    → Repository class implementing data access logic for Post.
    Extends BaseRepository and implements PostRepositoryInterface.

  • app/Services/Contracts/PostServiceInterface.php
    → Interface defining service-level business methods for Post.

  • app/Services/PostService.php
    → Service class implementing business logic related to Post.
    Extends BaseService and implements PostServiceInterface.

📌 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 your Custom service logic.

  • app/Services/CustomService.php
    → Contains business logic related to Custom, implements CustomServiceInterface.

🔌 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)

QR Code Techcombank

Account Holder: NGUYEN XUAN CUONG
Account Number: 1368686856
Bank: Techcombank

📬 Contact

📝 License

统计信息

  • 总下载量: 53
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-07-29