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.