2016-06-09 60 views
0

我正在使用laravel,并使用transform方法更改数据对象中项目的名称,但它不起作用,它向我显示了复制数据库列名称的相同数据。Transform()不起作用Laravel

<?php 
    namespace App\Http\Controllers; 
    use Illuminate\Http\Request; 
    use App\Http\Requests; 
    use App\Lessons; 
    use Illuminate\Support\Facades\Response; 
    use League\Fractal\TransformerAbstract; 
    class LessonsController extends Controller 
    { 
     public function index() 
     { 
      $lessons= Lessons::all(); 
      return Response::json([ 
       'data'=>$lessons->toArray() 
      ],200); 
     } 

     public function show($id) 
     { 
     $lessons= Lessons::find($id); 
     if(! $lessons) 
     { 
      return Response::json([  
       'error'=>[ 
        'message'=>'Lesson not found', 
       ] 
      ],404); 
     } 
     return Response::json([ 
      'data'=>$lessons->toArray() 
     ],200); 
    } 
    private function transform ($lessons) 
    { 
     return array_map(function($lesson) 
     { 
      return [ 
       'heading'=>$lesson['title'], 
       'body'=>$lesson['body'] 
      ]; 
     },$lessons->toArray()); 
    } 
} 

,这是我打电话的网址:

http://localhost:8000/api/v1/lessons

,这是输出我越来越:

{ 
    "data": [ 
    { 
     "title": "Title 1", 
     "body": "body 1" 
    }, 
    { 
     "title": "title 2", 
     "body": "body 2" 
    }, 
    { 
     "title": "Title 3", 
     "body": "body 3" 
    }, 
    { 
     "title": "title 4", 
     "body": "body 4" 
    } 
    ] 
} 

底线:我想标题标题,而不是在输出,但没有得到它。转换功能不起作用

+0

我看不到在您的代码中任何地方使用'transform()'方法。 – Doom5

回答

0

您必须将$lessons传递给您的transform()方法。

public function index() 
{ 
    $lessons= Lessons::all(); 
    return Response::json([ 
     'data'=> $this->transform($lessons) 
    ], 200); 
} 
+0

谢谢先生, 只是一个小小的修改,它的工作 –

+0

公共职能索引() { \t $ lesson = Lessons :: all(); return Response :: json([ 'data'=> $ this-> transform($ lessons) ],200); } –

+0

哦,是的。我没有注意到你在'transform()'里面调用'toArray()'。我的错。 – Doom5