2016-12-08 5 views
3

ページ付けlaravelでいくつかのデータを追加します。ここに私のコントローラはは、点画が言ったように

$book = Data::where('userId','1')->paginate(3); 

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

であり、このようなJSONデータを取得:

data:[{id: 1, userId: 1, vendorId: 1, name: "Alfreda Berge PhD", phone: "1-850-813-5950 x96169",…},…] 
from:1 
last_page:2 
next_page_url: "http:/localhost/XX/public/user/book/list/1?page=2" 
perpage:4 
prev_page_url:null 
to:4 
total:5 
// if I want to add a new column and value here ,what should I do? 

私はこれを実行しようとしました:

$book = Data::where('userId','1')->paginate(3); 
$book->printWord = 'Hellow!'; 
return response()->json($book); 

ただし、列printWordが削除されているようです。

答えて

8

手動でカスタムデータを持つコレクションを作成し、merge()ヘルパー使用することができます。

$book = Data::where('userId','1')->paginate(3); 

$custom = collect(['my_data' => 'My custom data here']); 

$data = $custom->merge($book); 

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

ちょうどチェックされて、それはうまく動作します。

1

paginate関数は、タイプIlluminate\Pagination\LengthAwarePaginatorのオブジェクトを返します。これに別のフィールドを追加することはできません。

私は最良の解決策は、ページングオブジェクトと他の値を配列に追加し、この配列をjsonに変換することだと思います。こうすることで、書籍のデータと追加する他のデータとが分離されます。そのよう

return response()->json([ 
    'books' => $books, 
    'foo' => 'bar' 
]); 

この場合、あなたのJSONオブジェクトは、次のようになります。

{ 
    books: { 
     // Pagination object with books 
    } 
    foo: 'bar' 
} 
+1

このように返すことは可能でしょうか? response() - > json($ books); – Fan

+0

はい、配列をあらかじめ作成しておき、 '$ books'に代入するとします。しかし、それはまったく同じです。 – Jerodev

+0

[OK]、「Illuminate \ Pagination \ LengthAwarePaginator」というキーワードが表示されます。これに別のフィールドを追加することはできません。ありがとうございます – Fan

関連する問題