在laravel中使用makeHidden的正确方法

时间:2017-04-16 11:19:42

标签: php laravel eloquent

我的分页有问题。

一切正常,没有错误,但问题是当我使用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 是追加字段而不是真正的列

3 个答案:

答案 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响应。