我的分页有问题。
一切正常,没有错误,但问题是当我使用makeHidden和我的代码时,它改变了我的json分页结果的结构
这是我的代码
$result = Job::where('user_id','=',Auth::id())->paginate(5);
$result= $result->makeHidden(['hasMessage']);
没有第二行,结果是
{
total: 1 ,
per_page: 5,
current_page: 1,
last_page: 1,
next_page_url: null,
prev_page_url: null,
from: 1,
to: 1,
data: [
{
id: 4,
sid:125,
hasMessage: true
}
]
}
但是当我使用
时$result= $result->makeHidden(['hasMessage']);
我得到了
[
{
id: 4,
sid:125,
}
]
请问有什么想法吗? ? ?这是一个错误还是有问题? ?
hasMessage 是追加字段而不是真正的列
答案 0 :(得分:6)
最后我用小编程技巧
做到了 $paginator = Job::where('user_id','=',Auth::id())->paginate(5);
$data = $paginator->makeHidden(['hasMessage']);
$paginator->data = $data;
return $paginator;
谢谢
答案 1 :(得分:4)
如果要保留分页数据,请使用getCollection()
和setCollection()
方法:
$paginator = Job::where('user_id','=',Auth::id())->paginate(5);
$paginator->setCollection($paginator->getCollection()->makeHidden(['hasMessage']));
return $paginator;
答案 2 :(得分:0)
您的代码中缺少toArray()
。应该是这样的:
$result= $result->makeHidden(['hasMessage'])->toArray();
查看文档:
https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json
修改强>
我也试过paginate
并确实返回了已更改的数组,它是makeHidden()
的预期输出。
您还可以查看该功能:
public function makeHidden($attributes)
{
$attributes = (array) $attributes;
$this->visible = array_diff($this->visible, $attributes);
$this->hidden = array_unique(array_merge($this->hidden, $attributes));
return $this;
}
正如它array_merge
那样,它会影响你的json响应。