Как сказано в заголовке, вот мой контролер
$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
,
Любая идея?
Вы можете создать коллекцию с пользовательскими данными вручную и использовать merge()
помощник:
$book = Data::where('userId','1')->paginate(3);
$custom = collect(['my_data' => 'My custom data here']);
$data = $custom->merge($book);
return response()->json($data);
Только что проверил, работает просто отлично.
Функция paginate вернет объект типа Illuminate\Pagination\LengthAwarePaginator
, невозможно просто добавить другое поле к этому.
Я думаю, что лучшим решением для вас было бы добавить объект пагинации и другие значения в массив и преобразовать этот массив в json. Таким образом, данные ваших книг отделены от других данных, которые вы хотите добавить.
Вот так:
return response()->json([
'books' => $books,
'foo' => 'bar'
]);
В этом случае ваш объект json будет выглядеть так:
{
books: {
// Pagination object with books
}
foo: 'bar'
}