Добавьте некоторые данные в lagvel paginate

Как сказано в заголовке, вот мой контролер

$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,
Любая идея?

6

Решение

Вы можете создать коллекцию с пользовательскими данными вручную и использовать merge() помощник:

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

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

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

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

Только что проверил, работает просто отлично.

16

Другие решения

Функция paginate вернет объект типа Illuminate\Pagination\LengthAwarePaginator, невозможно просто добавить другое поле к этому.

Я думаю, что лучшим решением для вас было бы добавить объект пагинации и другие значения в массив и преобразовать этот массив в json. Таким образом, данные ваших книг отделены от других данных, которые вы хотите добавить.

Вот так:

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

В этом случае ваш объект json будет выглядеть так:

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

По вопросам рекламы [email protected]