2016-12-08 2 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, это не возможно просто добавить к нему другое поле.

Я думаю, что лучшим решением для вас было бы добавить объект pagination и другие значения в массив и преобразовать этот массив в 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

Хорошо, я вижу ключевое слово «Illuminate \ Pagination \ LengthAwarePaginator», просто невозможно добавить к нему еще одно поле ». thank's – Fan