Skip to content

Instantly share code, notes, and snippets.

@jildertmiedema
Last active August 29, 2015 14:02
Show Gist options
  • Save jildertmiedema/7a65b9f26f1c29fc2b0f to your computer and use it in GitHub Desktop.
Save jildertmiedema/7a65b9f26f1c29fc2b0f to your computer and use it in GitHub Desktop.
<?php
require 'vendor/autoload.php';
use League\Fractal;
use League\Fractal\Manager;
use League\Fractal\Resource\Collection;
use League\Fractal\TransformerAbstract;
use League\Fractal\Serializer\JsonApiSerializer;
class ChildTransformer extends TransformerAbstract
{
public function transform($item)
{
return ['id' => $item['id']];
}
}
class ParentTransformer extends TransformerAbstract
{
protected $defaultIncludes = [
'childs',
];
public function transform($item) {
return ['id' => $item['id']];
}
public function includeChilds($item)
{
return $this->collection($item['data'], new ChildTransformer(), 'childs');
}
}
$a = ['id' => 10];
$b = ['id' => 20];
$c = ['id' => 30];
$items = [
['id' => 1, 'data' => [$a, $b]],
['id' => 3, 'data' => [$c]],
['id' => 2, 'data' => []],
];
$manager = new Manager();
$manager->setSerializer(new JsonApiSerializer());
$resource = new Collection($items, new ParentTransformer(), 'parent');
$array = $manager->createData($resource)->toArray();
echo $manager->createData($resource)->toJson();
// output: {"parent":[{"id":1},{"id":3},{"id":2}],"linked":{"childs":[{"id":10},{"id":20},{"id":30},[]]}}
// expected: {"parent":[{"id":1},{"id":3},{"id":2}],"linked":{"childs":[{"id":10},{"id":20},{"id":30}]}}
// empty array on the end is not desired
@philsturgeon
Copy link

Can you do this:

    public function includeChilds($item)
    {
        if (empty($item['data'])) return;
        return $this->collection($item['data'], new ChildTransformer(), 'childs');
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment