Ad

Fractal ParseIncludes Not Working

- 1 answer

I'm using the Laravel framework for my web app, eloquent models for data and Fractal to transform some data.

I want to use the parseIncludes functionality of fractal but I can't seem to get it working despite following the docs.

Here's my code:

StudentTransformer.php

class StudentTransformer extends Fractal\TransformerAbstract
{

    protected $availableIncludes = [
        'course'
    ];

    public function transform(Student $student)
    {
        return [
            'name'           => $student->name,
            // other attributes
        ];
    }

    public function includeCourse(Student $student)
    {
        $course = $student->course;

        return $this->item($course, new CourseTransformer);
    }

}

CourseTransformer.php

class CourseTransformer extends Fractal\TransformerAbstract
{
    public function transform(Course $course)
    {
        return [
            'name' => $course->name
            // other attributes
        ];
    }
}

In one of my controllers:

$student = App\Models\Student::first();

$fractal = new \League\Fractal\Manager();

$fractal->parseIncludes('/student?include=course');

$fractal->setSerializer(new \League\Fractal\Serializer\ArraySerializer());

$response = new \League\Fractal\Resource\Item($student, new \App\Transformers\Models\StudentTransformer);

return response()->json($fractal->createData($response)->toArray());

Also, when I remove the availableIncludes from the StudentTransformer and use defaultIncludes instead, like so:

protected $defaultIncludes = [
    'course'
];

It works just fine?! No idea why! Any help would be appreciated.

Ad

Answer

Fixed it. For the benefit of others, the issue was here:

$fractal->parseIncludes('/student?include=course');

It should just be:

$fractal->parseIncludes('course');
Ad
source: stackoverflow.com
Ad