2015-12-01 62 views
1

我嘗試使用fractal將模型中的日期轉換爲通過ajax發送到網頁時的日期。但是,我沒有得到預期的轉換數據對象。這裏是我的代碼:使用分形轉換雄辯模型

變壓器:

<?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]); 

}); 

返回此:

[ 
    { } 
] 

如果我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 
    } 
} 

任何想法,我在這裏失蹤?

回答

1

我的實現如下:

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實例和一個串行分配到它。經理會將數據返回給數組或其他人。

fractal page,有更多的細節。

+1

似乎很好用!謝謝@YMHuang。我一定會看看'經理'上的鏈接,顯然我錯過了一些東西!現在我需要如何弄清楚相關模型的轉換大聲笑!再次非常感謝! – haakym

0

我沒有在項目中使用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()); 

}); 
+0

感謝您的回覆@Lee - 恐怕它不起作用。我得到以下內容:'調用未定義的方法League \ Fractal \ Resource \ Item :: toArray()' – haakym