salamwaddah / laravel-relation-parser
Easily load model relations from frontend without changing your API
Installs: 12 951
Dependents: 0
Suggesters: 0
Security: 0
Stars: 10
Watchers: 2
Forks: 1
Open Issues: 1
pkg:composer/salamwaddah/laravel-relation-parser
Requires
- php: >=8.1
- illuminate/database: ^10.0 || ^11.0 || ^12.0
- illuminate/http: ^10.0 || ^11.0 || ^12.0
Requires (Dev)
- orchestra/testbench: ^8.5
- phpunit/phpunit: ^10.0
README
Installation
composer require salamwaddah/laravel-relation-parser
| Version | Laravel | PHP | 
|---|---|---|
| 1.x | 10, 11, 12 | >= 8.1 | 
| 0.3.x | 8, 9 | >= 7.3 | 
Usage
Allow your application to load any model relation in the response without the need of changing your API controllers.
Pass a comma separated relations to your http request.
Loading relations
Add a with param to your HTTP request
/users?with=orders,posts,anyOtherRelation
Loading relation counts
Add a with_count param to your HTTP request
/users?with_count=orders,anyOtherRelation,anotherRelationToCount,blaBlaBla
Loading relations and counts
/users?with=orders&with_count=orders
In your controller
use SalamWaddah\RelationParser\LoadsRelations; use Illuminate\Http\Request; class UsersController extends Controller { use LoadsRelations; public function index(Request $request) { $users = User::query() // .. your query logic here ->get(); // this line adds the relations/counts $this->loadRelations($users, $request); // return your results however you like return response()->json($users); } }
Response example
[
  {
    "id": 1,
    "name": "Salam",
    "orders_count": 2,
    "orders": [
      {
        "id": 2,
        "product": "something",
        "price": 100
      },
      {
        "id": 1,
        "product": "something else",
        "price": 150
      }
    ]
  },
  {
    "id": 2,
    "name": "Naren",
    "orders_count": 1,
    "orders": [
      {
        "id": 3,
        "product": "something",
        "price": 100
      }
    ]
  }
]
Customize
If with or with_count params are used for something else in your application then you can customize those params
in loadRelations() method.
$this->loadRelations($users, $request, 'customWithParam', 'custom_with_count_param');
Testing
composer test