使用分形变换 eloquent 模型

Transform eloquent model using fractal

我在通过 ajax 将其发送到网页时尝试使用 fractal to convert dates in my eloquent 模型。但是,我没有得到预期的转换数据对象。这是我的代码:

变形金刚:

<?php

namespace App\Transformers\Models;

use App\Models\Student;
use League\Fractal;

class StudentTransformer extends Fractal\TransformerAbstract
{
    public function transform(Student $student)
    {
        return [
            'name'           => $student->name,
            'birth_date'     => date('d-m-Y', strtotime($student->birth_date)),
            'start_date'     => date('d-m-Y', strtotime($student->start_date)),
            'is_active'      => $student->is_active ? 'Yes' : 'No',
            'course_title'   => $student->course_title,
            'university_id'  => $student->university_id,
            'institution_id' => $student->institution_id,
            'course_id'      => $student->course_id,
        ];
    }
}

路线文件:

Route::get('/', function () {

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

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

    return response()->json([$response]);

});

returns这个:

[
    { }
]

如果我dd(),像这样:

Route::get('/', function () {

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

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

    dd($response);

});

我得到以下结果,没有进行明显的转换

Item {#299 ▼
  #data: Student {#305 ▼
    #fillable: array:10 [▼
      0 => "name"
      1 => "birth_date"
      2 => "start_date"
      3 => "is_active"
      4 => "course_title"
      5 => "university_id"
      6 => "institution_id"
      7 => "course_id"
    ]
    #connection: null
    #table: null
    #primaryKey: "id"
    #perPage: 15
    +incrementing: true
    +timestamps: true
    #attributes: array:13 [▼
      "id" => 1
      "name" => "Michel Jast"
      "birth_date" => "1979-12-22"
      "start_date" => "2015-08-02"
      "is_active" => 1
      "course_title" => "quia"
      "university_id" => "10954"
      "institution_id" => 1044
      "course_id" => 1
      "created_at" => "2015-11-23 09:40:35"
      "updated_at" => "2015-11-26 10:24:14"
    ]
    #original: array:13 [▼
      "id" => 1
      "name" => "Michel Jast"
      "birth_date" => "1979-12-22"
      "start_date" => "2015-08-02"
      "is_active" => 1
      "course_title" => "quia"
      "university_id" => "10954"
      "institution_id" => 1044
      "course_id" => 1
      "created_at" => "2015-11-23 09:40:35"
      "updated_at" => "2015-11-26 10:24:14"
    ]
    #relations: []
    #hidden: []
    #visible: []
    #appends: []
    #guarded: array:1 [▶]
    #dates: []
    #dateFormat: null
    #casts: []
    #touches: []
    #observables: []
    #with: []
    #morphClass: null
    +exists: true
  }
  #meta: []
  #resourceKey: null
  #transformer: StudentTransformer {#301 ▼
    #availableIncludes: []
    #defaultIncludes: []
    #currentScope: null
  }
}

知道我在这里遗漏了什么吗?

我没有在项目中使用过 Factral,但我认为你需要做类似的事情。

Route::get('/', function () {

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

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

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

});

我的实现如下:

Route::get('/', function () {

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

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

    $manager = new \League\Fractal\Manager();
    $manager->setSerializer(new \League\Fractal\Serializer\ArraySerializer());

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

});

您必须创建一个 \League\Fractal\Manager 实例并为其分配一个序列化程序。经理将return数据放入数组或其他。

fractal page中有更多的细节。