Architect
, (*1)
Introduction
Architect is used for dynamically creating new structures for API resource relationships.
Sounds confusing and pretentious?, (*2)
Imagine you have a resource Book with a related resource Author., (*3)
Book 1-----n Author
Normal embedded mode
This is how related resources are loaded by default using embedded mode., (*4)
{
"books":[
{
"id":1,
"author_id":1,
"title":"How to save the world from evil",
"pages":100,
"author":{
"id":1,
"name":"Optimus Prime"
}
},
{
"id":2,
"author_id":2,
"title":"How to take over the world",
"pages":100,
"author":{
"id":2,
"name":"Megatron"
}
}
]
}
With Architect now you can load related resources using ids mode and
sideloading mode, (*5)
Ids mode
Only load the IDs of the related resource.
Using the primary key property of Eloquent models is in the roadmap., (*6)
{
"books":[
{
"id":1,
"author_id":1,
"title":"How to save the world from evil",
"pages":100,
"author":1
},
{
"id":2,
"author_id":2,
"title":"How to take over the world",
"pages":100,
"author":2
}
]
}
Sideloading mode
Hoist the related resources into the global scope and leave behind the IDs
using the ID mode resolver., (*7)
{
"author":[
{
"id":1,
"name":"Optimus Prime"
},
{
"id":2,
"name":"Megatron"
}
],
"books":[
{
"id":1,
"author_id":1,
"title":"How to save the world from evil",
"pages":100,
"author":1
},
{
"id":2,
"author_id":2,
"title":"How to take over the world",
"pages":100,
"author":2
}
]
}
Usage
Architect works with normal array's (collections and resources), Illuminate\Support\Collection
and Illuminate\Database\Eloquent\Model., (*8)
<?php
$books = Book::with('Author')->get();
$architect = new \Iphuongtt\Architect\Architect;
$parsed = $architect->parseData($books, [
'author' => 'sideload' // can also be embed or ids (embed is default)
], 'books');
Iphuongtt\LaravelController gives
nice convenience methods to define the Architect relationships in query parameters., (*9)
Installation
composer require iphuongtt/architect ~1.0
Standards
This package is compliant with PSR-1, PSR-2 and PSR-4. If you notice compliance oversights,
please send a patch via pull request., (*10)
Testing
bash
$ phpunit, (*11)
Contributing
Please see CONTRIBUTING for details., (*12)
License
The MIT License (MIT). Please see License File for more information., (*13)