2017 © Pedro Peláez
 

library architect

image

iphuongtt/architect

  • Saturday, April 28, 2018
  • by iphuongtt
  • Repository
  • 1 Watchers
  • 0 Stars
  • 17 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 15 Forks
  • 0 Open issues
  • 7 Versions
  • 70 % Grown

The README.md

Architect

Latest Version Software License Build Status Coverage Status Total Downloads, (*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)

The Versions