PHPackages                             waad/laravel-generate-repository-api - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. waad/laravel-generate-repository-api

ActiveLibrary[API Development](/categories/api)

waad/laravel-generate-repository-api
====================================

package to generate repository design pattern with all accessories

v1.8.1(1y ago)863MITPHPPHP ^8.1

Since Mar 26Pushed 1y ago1 watchersCompare

[ Source](https://github.com/waadmawlood/laravel-generate-repository-api)[ Packagist](https://packagist.org/packages/waad/laravel-generate-repository-api)[ Docs](https://github.com/waadmawlood/laravel-generate-repository-api)[ RSS](/packages/waad-laravel-generate-repository-api/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (4)Versions (20)Used By (0)

Generate Repository Design Pattern Api
======================================

[](#generate-repository-design-pattern-api)

you can create your restful api easily by using this library with filtering sorting
-----------------------------------------------------------------------------------

[](#you-can-create-your-restful-api-easily-by-using-this-library-with-filtering-sorting)

[![Banner](https://raw.githubusercontent.com/waadmawlood/laravel-generate-repository-api/main/external/Laravel%20Generate%20Repository%20Api.png)](https://raw.githubusercontent.com/waadmawlood/laravel-generate-repository-api/main/external/Laravel%20Generate%20Repository%20Api.png)

Installation:
-------------

[](#installation)

Require this package with composer using the following command:

```
composer require waad/laravel-generate-repository-api
```

```
php artisan vendor:publish --provider="Waad\Repository\RepositoryServiceProvider"
```

in `config/app.php`

```
'providers' => [
    // ...
    Spatie\Permission\PermissionServiceProvider::class,
];
```

```
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
```

```
php artisan optimize:clear
php artisan migrate
```

⚠️ Change Default Guard from `config/auth.php` =&gt; `defaults.guard` if you want use differnet guard.

in `config/database.php` if use search multi column

```
'mysql' => [
    // .....
    'strict' => false,   // make false if used search parameter
    // .....
],
```

🚀 About Me
----------

[](#-about-me)

I'm a Back End developer...

- Author :[ Waad Mawlood](https://waad.netlify.app/)
- Email : [waad\_mawlood@outlook.com](mailto:waad_mawlood@outlook.com)

YAML Roadmap Job Of Package
---------------------------

[](#yaml-roadmap-job-of-package)

```
Package:
  app:
    DTO:
      className1:
        - className1Dto1.php
        - className1Dto2.php
      className2:
        - className2Dto1.php
        - className2Dto2.php
    Http:
      Controller:
        Api:
          - className1Controller.php
          - className2Controller.php
      Requests:
        className1:
          - StoreClassName1Request.php
          - UpdateClassName1Request.php
        className2:
          - StoreClassName2Request.php
          - UpdateClassName2Request.php
    Models:
      - ClassName1Model.php
      - ClassName2Model.php
    Policies:
      - ClassName1Policy.php
      - ClassName2Policy.php
    Interfaces:
      - ClassName1Interface.php
      - ClassName2Interface.php
    Repositories:
      - ClassName1Repository.php
      - ClassName2Repository.php
    Properties:
      className1:
        - className1Accessorable.php
        - className1Mutatorable.php
        - className1Propertable.php
        - className1Relatable.php
        - className1Scopable.php
      className2:
        - className2Accessorable.php
        - className2Mutatorable.php
        - className2Propertable.php
        - className2Relatable.php
        - className2Scopable.php
  config:
    - laravel-generate-repository-api.php
  database:
    migrations:
      - 15151515_create_{ClassNameTable1}_table
      - 15151517_create_{ClassNameTable2}_table
  routes:
    api.php: Add Route string inside file or
    web.php: Add Route string inside file
```

Usage
=====

[](#usage)

### - Generating All

[](#--generating-all)

```
php artisan repo:model NameModel --a
```

if use force

```
php artisan repo:model NameModel --a --force
```

in all that will generate (`model`, `migration`, `controller api`, `repository`, `interface`, `properties`, `request forms`, `route string in api or web`)

### - Generating Some

[](#--generating-some)

```
php artisan repo:model NameModel                // generating model, properties
```

```
php artisan repo:model NameModel --force        // generating model, properties (override)
```

```
php artisan repo:model NameModel --m            // generating model, properties, migration
```

```
php artisan repo:model NameModel --c            // generating model, generating controller, interface, repository, Request forms
```

```
php artisan repo:model NameModel --p --guard=agent          // generating model, generating policy with agent guard if null take default guard
```

```
php artisan repo:model NameModel --m --c --p    // generating model, generating migration, controller, policy, interface, repository, Request forms
```

```
php artisan repo:model NameModel --m --c --p --force   // generating model, generating migration, controller, policy, interface, repository, Request forms (override)
```

```
php artisan repo:model NameModel --permission            // generating model, properties, add permissions to database with default guard
```

```
php artisan repo:model NameModel --permission --guard=agent      // generating model, properties, add permissions to database with agent guard
```

```
php artisan repo:model NameModel --permission --guard=agent,user      // generating model, properties, add permissions to database with multi guard
```

```
php artisan repo:model NameModel --r            // generating model, properties, add route in side api file (Route::apiResource('class_name', 'ClassNameController');)
```

```
php artisan repo:model NameModel --r --route=web           // generating model, properties, add route in side web file (Route::apiResource('class_name', 'ClassNameController');)
```

```
php artisan repo:model NameModel --r --route=web ---resource          // generating model, properties, add route in side web file (Route::resource('class_name', 'ClassNameController');)
```

```
php artisan repo:model NameModel --ns          // generating model, properties, without soft delete in model and restore force delete methods in controller
```

---

### - After migration Create validation And DTO Files

[](#--after-migration-create-validation-and-dto-files)

create table columns in migration and do migration

```
php artisan migrate
```

```
php artisan repo:validation NameModel       // generate StoreRequestForm And UpdateRequestForm in Http/Requests/NameModel/....  with DTO File in DTO/NameModel/.....
```

```
php artisan repo:validation NameModel --ndto       // generate StoreRequestForm And UpdateRequestForm in Http/Requests/NameModel/....  without DTO
```

---

### - Create permissions of model into database customs

[](#--create-permissions-of-model-into-database-customs)

⚠️ use it if refresh database or drop permissions from database

```
php artisan repo:permission Car                     // get default guard
```

```
php artisan repo:permission Car --guard=api            // with guard
```

```
php artisan repo:permission Car --guard=api,web       // with multi guard

or

php artisan repo:permission Car --guard="api, web"    // with multi guard
```

---

### - Filtering, Sorting And Properties Of Model

[](#--filtering-sorting-and-properties-of-model)

#### Example In `properties/Car/CarPropertable`

[](#example-in-propertiescarcarpropertable)

`if you add manually`

```
use CarPropertable;
```

- **fillable** : fill allowed fields to inserting and updating from `$fillable_override` array property
- **filtering** : fill allowed fields to filtering from `$filterable` array property that use `filter,find` parameter in request
- **sorting** : fill allowed fields to sorting from `$sortable` array property
- **Other** :

 Property in Model  Aliases in Propertable *$connection*$connection\_override*$table*$table\_override*$primary*$primary\_override*$primary*$primary\_override*$timestamps*$timestamps\_override*$incrementing*$incrementing\_override*$keyType*$keyType\_override*$hidden*$hidden\_override*$dates*$dates\_override*$casts*$casts\_override*$guarded*$guarded\_override---

### - Accessor And Mutator Of Model

[](#--accessor-and-mutator-of-model)

#### Example In `properties/Car/CarAccessorable` And `properties/Car/CarMutatorable`

[](#example-in-propertiescarcaraccessorable--and-propertiescarcarmutatorable)

`if you add manually`

```
use CarAccessorable;
use CarMutatorable;
```

- **In Accessor and Mutator files there are some examples to create accessor And Mutator methods**
- **Appending** : add attributes for response from `$appends_override` array in Accessorable file

---

### - Scopes Of Model

[](#--scopes-of-model)

#### Example In `properties/Car/CarScopable`

[](#example-in-propertiescarcarscopable)

`if you add manually`

```
use CarScopable;
```

- **In Scopable file there are some examples to create scope methods**

---

### - Related Of Model

[](#--related-of-model)

#### Example In `properties/Car/CarRelatable`

[](#example-in-propertiescarcarrelatable)

`if you add manually`

```
use CarRelatable;
```

- **In Relatable file there are some examples to create Relationship methods with other models**
- **including** : model allow include (join) with other model Relationship by used `$includeable` array property example `user`, `user.city` when use `include=model,user.city` in request
- **Other** :

 Property in Model  Aliases in Relatable *$with*$with\_override*$withCount*$withCount\_override⚠️ don't remove `use ConstructorableModel;` in **Relatable**

---

### - Policy Of Controller

[](#--policy-of-controller)

#### Example In `Policies/CarPolicy`

[](#example-in-policiescarpolicy)

- **first** : Add Triats to any model used Authontication eg . `User`, `Admin` in Model

Example

```
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Notifications\Notifiable;
use Waad\Repository\Traits\HasAnyRolePermissions;

class User extends Authenticatable
{
    use Notifiable;
    use HasRoles;                 // important
    use HasAnyRolePermissions;    // important
    ...............
```

if you choose generate policy in command line with creating policy for model and controller will call to it automatic from cosntructor of controller ex `$this->authorizeResource(Car::class, 'car');`

- if don't define policy because of named or another problem define it from `app/Providers/AuthServiceProvider.php`

example

```
use App\Models\Car;
use App\Policies\CarPolicy;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Car::class => CarPolicy::class,
    ];

    public function boot()
    {
        $this->registerPolicies();

        // use super admin that don't check any permission if was Super Admin
        // you can change that from `config/laravel-generate-repository-api.php`
        Gate::before(function ($user, $ability) {
            return $user->hasRole(config('laravel-generate-repository-api.super_admin')) ? true : null;
        });
    }
}
```

🔥 Change Role Of Super from `config/laravel-generate-repository-api.php`

❤️ `php artisan optimize ` to clear cache of config

Example Policy for `HasAnyRolePermissions`

```
    /**
     * Determine whether the user can create models.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Auth\Access\Response|bool
     */
    public function create(User $user)
    {
        return $user->hasAnyRolePermissions(['Admin', 'category_create'], ['api']); // "Admin" Or "category_create"
    }

    // **************************************************************

    /**
     * Determine whether the user can create models.
     *
     * @param  \App\Models\User  $user
     * @return \Illuminate\Auth\Access\Response|bool
     */
    public function create(User $user)
    {
        return $user->hasAllRolePermissions(['Admin', 'category_create'], ['api']); // "Admin" And "category_create"
    }
```

Examples with Requests
======================

[](#examples-with-requests)

- [http://127.0.0.1:8000/api/cars?include=user.city,model,color&amp;sort=-date\_made,user.name&amp;select=id,name,age&amp;except=age,notes](http://127.0.0.1:8000/api/cars?include=user.city,model,color&sort=-date_made,user.name&select=id,name,age&except=age,notes)

 Parameter  Cases *include*string seperator "," comma*sort*string with "-" DESC Order else ASC (support multiple nested seperator "," comma)*select*return only select columns from table*except*return all columns of table exclude except- [http://127.0.0.1:8000/api/cars?include=user.city&amp;filter\[user.city.name\]=baghdad](http://127.0.0.1:8000/api/cars?include=user.city&filter%5Buser.city.name%5D=baghdad)=&gt; `user.city.name LIKE baghdad`

 Parameter  Cases *filter*array search also with relationsip used `LIKE` Operator In Database*search*search multi columns with relationsip used `LIKE` Operator In Database use `searchable` property*strict*flag boolean used with `search` if equal `1` or `true` will return more data else return few- [http://127.0.0.1:8000/api/cars?include=user.city&amp;find\[user.city.name\]=baghdad&amp;find\[model.year\]=lt:1995:or:gt:2020](http://127.0.0.1:8000/api/cars?include=user.city&find%5Buser.city.name%5D=baghdad&find%5Bmodel.year%5D=lt:1995:or:gt:2020)

=&gt; `(user.city.name = baghdad) And (model.year < 1995 OR model.year > 2020)`

- find same filter but not use `Like` Operator by default `Equal` `=`

 Operator  Aliases  Example *eq*=`find[user.name]=waad` `find[user.name]=eq:waad`*ne*!=`find[user.name]=ne:waad`*gt*&gt;`find[user.age]=gt:50` `find[user.age]=gt:50:and:lt:100`*ge*&gt;=`find[user.age]=ge:50` `find[user.age]=ge:50:and:le:100`*lt*&lt;`find[user.age]=lt:50` `find[user.age]=lt:50:and:gt:10`*le*&lt;=`find[user.age]=le:50` `find[user.age]=le:50:and:ge:10`*notlike*NOT LIKE`find[user.name]=notlike:waad`*in*OR`find[user.age]=in:44,43`*notin*NOT OR`find[user.age]=notin:44,43`*null*NULL`find[user.name]=null`*notnull*NOT NULL`find[user.name]=notnull`*today*TODAY`find[car.created_at]=today`*nottoday*NOT TODAY`find[car.created_at]=nottoday`😍 If you send values by `base64` example `find[user.age]={{b64(NTY=)}}` =&gt; `find[user.age]=56`

#### - Use Pagination Or Unlimit Takes with Request

[](#--use-pagination-or-unlimit-takes-with-request)

#### Use `take` and `page` Parameters

[](#use-take-and-page-parameters)

- **Pagination** : use `Pagination` request form with take 100 default eg.

```
use App\Http\Requests\Pagination;

public function index(Pagination $pagination)
{
    return $this->CarRepository->index($pagination);
}
```

- **Unlimit** : use `Unlimit` request form with take 100 default if use take eg.

```
use App\Http\Requests\Unlimit;

public function index(Unlimit $unlimit)
{
    return $this->CarRepository->index($unlimit);
}
```

#### - Return Trashed Records if use soft delete

[](#--return-trashed-records-if-use-soft-delete)

#### Use `trash` parameter including these values:

[](#use-trash-parameter-including-these-values)

 Operator  Meaning *current* or *NULL* or *empty*get records without trashed*all*get all records with trashed*trashed*get records only trashed```
// in Controller
public function index(Pagination $pagination)
{
    return $this->CarRepository->index($pagination, $pagination->trash);
}
```

#### - Use DTO Model, Pagination and List Responses

[](#--use-dto-model-pagination-and-list-responses)

- one model use direct DTO eg.

```
// in controller or repository

use App\DTO\Car\CarDto;

public function show(Car $car)
{
    $car = $this->CarRepository->show($driver)->load('driver');

    return response()->json(new CarDto($car->toArray()));
}
```

- Pagination model use paginate DTO from package eg.

```
// in controller or repository

use App\DTO\Car\CarDto;
use Waad\Repository\DTO\PaginationDto;

public function index($request)
{
    $result = $this->indexObject($request)->paginate();

    return new PaginationDto($result, CarDto::class);
}
```

OR

```
// in controller or repository

use App\DTO\Car\CarDto;
use Waad\Repository\DTO\DTO;

public function index($request)
{
    $result = $this->indexObject($request)->paginate();

    return DTO::pagiantion($result, CarDto::class);
}
```

- List model use List DTO from package eg.

```
// in controller or repository

use App\DTO\Car\CarDto;
use Waad\Repository\DTO\ListDto;

public function index($request)
{
    $result = $this->indexObject($request)->get();

    return new ListDto($result, CarDto::class);
}
```

OR

```
// in controller or repository

use App\DTO\Car\CarDto;
use Waad\Repository\DTO\DTO;

public function index($request)
{
    $result = $this->indexObject($request)->paginate();

    return DTO::list($result, CarDto::class);
}
```

License
-------

[](#license)

[MIT](https://choosealicense.com/licenses/mit/)

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance34

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity62

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~28 days

Recently: every ~76 days

Total

19

Last Release

628d ago

PHP version history (3 changes)v1.0.1PHP ^8.0

v1.2.0PHP ^8.0.2

v1.3.0PHP ^8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/44348636?v=4)[Waad Mawlood](/maintainers/waadmawlood)[@waadmawlood](https://github.com/waadmawlood)

---

Top Contributors

[![waadmawlood](https://avatars.githubusercontent.com/u/44348636?v=4)](https://github.com/waadmawlood "waadmawlood (24 commits)")

---

Tags

apilaravelpackagepermissionmodelsrepositorydtopropertiesaccessormutatorvalidationsrepoWaad Mawloodlaravel-phpdesign pattetnpolices

### Embed Badge

![Health badge](/badges/waad-laravel-generate-repository-api/health.svg)

```
[![Health](https://phpackages.com/badges/waad-laravel-generate-repository-api/health.svg)](https://phpackages.com/packages/waad-laravel-generate-repository-api)
```

###  Alternatives

[joisarjignesh/bigbluebutton

BigBlueButton Server API Library for Laravel

162145.5k1](/packages/joisarjignesh-bigbluebutton)[gregoriohc/laravel-trello

A Laravel wrapper and facade package for the Trello API

3366.8k2](/packages/gregoriohc-laravel-trello)[vinelab/api-manager

Laravel API Manager Package - beatify and unify your responses with the least effort possible.

392.1k](/packages/vinelab-api-manager)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
