2017-07-07 1 views
1

を次ていますlaravelデータベースのページ付け結果をフォーマット(変換)する方法は?たとえば、私は、コードを

public function index() 
{ 
    return 
     Model::select(['id', 'some_field', ...// more some fields]) 
      ->with('data') // load relation 
      ->paginate(20); 
} 

どのように私は(上の操作/変換)をフォーマットしますが、データベースからデータを取得しましたか? https://book.cakephp.org/3.0/en/orm/query-builder.html#adding-calculated-fields & & https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#map-reduce

しかし、私は私がLaravelで同じことを行うのを助けることができる任意のものを、見つけることができません -

CakePHPのORMは、このために有用な方法があります。 モデルの "toArray"メソッドをオーバーライドできますが、これは(コントローラのインデックスアクションだけでなく)すべてのアプリケーション部品に影響します。

+0

返されたコレクションで 'map'を使うことができます。 –

答えて

2

あなたは、たとえば、Laravelで同じことを行うことができます

return Model::select(['id', 'some_field', ...// more some fields]) 
->with('data') 
->paginate(20) 
->map(function($item, $key) { 
    // Some pseudo code 
    $item->uid = uniqid(); 

    // Must return the $item 
    return $item; 
}); 

同様のことをやって、他の方法があります。 Laravelでさらに多くのことを行うことができます。多くの中では、transformメソッドもあります。

1

paginate()およびget()Collectionを返します。Collection methodsにアクセスできます。

あなたは行うことができるようになります。

public function index() 
{ 
    return 
     Model::select(['id', 'some_field', ...// more some fields]) 
      ->with('data') // load relation 
      ->paginate(20) 
      ->map(function($model) { 
       $model->total_things = $model->one_thing + $model->other_thing; 
       return $model; 
      }); 
} 
関連する問題