在laravel paginate中添加一些数据

Fan*_*Fan 9 php paginate laravel laravel-5

正如tittle所说,这是我的控制器

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

return response()->json($book);
Run Code Online (Sandbox Code Playgroud)

并获取这样的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? 
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

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

但是,它似乎将删除列printWord.任何的想法?

Ale*_*nin 29

您可以手动创建包含自定义数据的集合并使用merge()帮助程序:

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

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

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

return response()->json($data);
Run Code Online (Sandbox Code Playgroud)

刚检查过,它运作得很好.


小智 5

如果您“手动”使用Illuminate\Pagination\LengthAwarePaginator类,则可以选择扩展它并覆盖该toArray方法:

return new class(
    $collection,
    $count,
    $limit,
    $page,
    // https://github.com/laravel/framework/blob/6.x/src/Illuminate/Pagination/LengthAwarePaginator.php#L40
    // values here will become properties of the object
    [
        'seed' => $seed
    ]
) extends LengthAwarePaginator {
    public function toArray()
    {
        $data = parent::toArray();
        // place whatever you want to send here
        $data['seed'] = $this->seed;
        return $data;
    }
};
Run Code Online (Sandbox Code Playgroud)

结果

current_page    1
data    []
first_page_url  "/finder?max_miles=100&zip_code=10001&seed=0.2&page=1"
from    null
last_page   1
last_page_url   "/finder?max_miles=100&zip_code=10001&seed=0.2&page=1"
next_page_url   null
path    "/finder"
per_page    20
prev_page_url   null
to  null
total   0
seed    0.2 // <-- our custom prop
Run Code Online (Sandbox Code Playgroud)

实例化LengthAwarePaginator自己需要一些额外的工作,但它可以完成工作。