首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在laravel中使用makeHidden的正确方法

在laravel中使用makeHidden的正确方法
EN

Stack Overflow用户
提问于 2017-04-16 19:19:42
回答 3查看 12.1K关注 0票数 7

我对分页有问题。

一切工作正常,没有错误,但问题是当我在代码中使用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,
    }
   ]

有什么想法吗?是bug还是出了什么问题?

hasMessage是一个追加字段,而不是一个实列

EN

回答 3

Stack Overflow用户

发布于 2017-04-16 22:33:32

最后,我用小编程技巧做到了这一点。

 $paginator = Job::where('user_id','=',Auth::id())->paginate(5);
 $data = $paginator->makeHidden(['hasMessage']);
 $paginator->data = $data;
 return $paginator;

谢谢

票数 17
EN

Stack Overflow用户

发布于 2020-03-31 16:52:29

如果希望保留分页数据,请使用getCollection()setCollection()方法:

$paginator = Job::where('user_id','=',Auth::id())->paginate(5);
$paginator->setCollection($paginator->getCollection()->makeHidden(['hasMessage']));
return $paginator;
票数 8
EN

Stack Overflow用户

发布于 2017-04-16 19:23:08

您的代码中缺少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响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43436666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档