From 3d06daf133908fa509389ca96628a6fae002219f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nil=20Portugu=C3=A9s=20Calder=C3=B3?= Date: Mon, 7 Sep 2015 20:34:41 +0200 Subject: [PATCH] Eloquent Models & Collection 100% compatible now! --- .../JsonApiSerializer/JsonApiSerializer.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php index a802eaf..e023825 100644 --- a/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php +++ b/src/NilPortugues/Laravel5/JsonApiSerializer/JsonApiSerializer.php @@ -10,6 +10,7 @@ */ namespace NilPortugues\Laravel5\JsonApiSerializer; +use Illuminate\Database\Eloquent\Model; use NilPortugues\Api\JsonApi\JsonApiTransformer; use NilPortugues\Serializer\DeepCopySerializer; @@ -25,4 +26,32 @@ public function __construct(JsonApiTransformer $strategy) { parent::__construct($strategy); } + + + /** + * Extract the data from an object. + * + * @param mixed $value + * + * @return array + */ + protected function serializeObject($value) + { + if ($value instanceof \Illuminate\Database\Eloquent\Collection) { + $items = []; + foreach ($value->all() as &$v) { + $items[] = $this->serializeObject($v); + } + return [self::MAP_TYPE => 'array', self::SCALAR_VALUE => $items]; + } + + if (is_subclass_of($value, Model::class, true)) { + $stdClass = (object) $value->getAttributes(); + $data = $this->serializeData($stdClass); + $data[self::CLASS_IDENTIFIER_KEY] = get_class($value); + return $data; + } + + return parent::serializeObject($value); + } }