From cdd31ed05dfb499118628df96a1208209db31144 Mon Sep 17 00:00:00 2001 From: Joseph Cohen Date: Mon, 23 Feb 2015 00:00:20 -0600 Subject: [PATCH] Use include for relations --- app/routes/api.php | 1 - .../Controllers/Api/ComponentController.php | 12 ------- src/Transformers/ComponentTransformer.php | 34 +++++++++++++++++++ src/Transformers/TagTransformer.php | 27 +++++++++++++++ 4 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 src/Transformers/TagTransformer.php diff --git a/app/routes/api.php b/app/routes/api.php index f5d2c52b..30ad0450 100644 --- a/app/routes/api.php +++ b/app/routes/api.php @@ -4,7 +4,6 @@ Route::api(['after' => 'allowed_domains', 'namespace' => 'CachetHQ\Cachet\Http\C // Components Route::get('components', 'ComponentController@getComponents'); Route::get('components/{id}', 'ComponentController@getComponent'); - Route::get('components/{id}/incidents', 'ComponentController@getComponentIncidents'); // Incidents Route::get('incidents', 'IncidentController@getIncidents'); diff --git a/src/Http/Controllers/Api/ComponentController.php b/src/Http/Controllers/Api/ComponentController.php index d192142c..a63fceef 100644 --- a/src/Http/Controllers/Api/ComponentController.php +++ b/src/Http/Controllers/Api/ComponentController.php @@ -53,18 +53,6 @@ class ComponentController extends Controller return $this->component->findOrFail($id); } - /** - * Return a component with incidents. - * - * @param int $id - * - * @return \CachetHQ\Cachet\Models\Component - */ - public function getComponentIncidents($id) - { - return $this->component->with($id, ['incidents']); - } - /** * Create a new component. * diff --git a/src/Transformers/ComponentTransformer.php b/src/Transformers/ComponentTransformer.php index 4f18f93f..8235e6bd 100644 --- a/src/Transformers/ComponentTransformer.php +++ b/src/Transformers/ComponentTransformer.php @@ -7,6 +7,16 @@ use League\Fractal\TransformerAbstract; class ComponentTransformer extends TransformerAbstract { + /** + * List of resources possible to include. + * + * @var array + */ + protected $availableIncludes = [ + 'incidents', + 'tags', + ]; + /** * Transform a component model into an array. * @@ -27,4 +37,28 @@ class ComponentTransformer extends TransformerAbstract 'updated_at' => $component->updated_at->timestamp, ]; } + + /** + * Include component incidents. + * + * @return League\Fractal\Resource\Collection + */ + public function includeIncidents(Component $component) + { + $incidents = $component->incidents; + + return $this->collection($incidents, new IncidentTransformer()); + } + + /** + * Include components tags. + * + * @return League\Fractal\Resource\Collection + */ + public function includeTags(Component $component) + { + $incidents = $component->tags; + + return $this->collection($incidents, new TagTransformer()); + } } diff --git a/src/Transformers/TagTransformer.php b/src/Transformers/TagTransformer.php new file mode 100644 index 00000000..f17ca3a9 --- /dev/null +++ b/src/Transformers/TagTransformer.php @@ -0,0 +1,27 @@ + (int) $tag->id, + 'name' => $tag->name, + 'description' => $tag->slug, + 'created_at' => $tag->created_at->timestamp, + 'updated_at' => $tag->updated_at->timestamp, + ]; + } +}