2017-04-16 267 views
0

我对分页有问题。在laravel中使用makeHidden的正确方法

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

你缺少在代码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它distotes你的JSON响应。

+0

不幸的是,我也有同样的结果,问题是不要让JSON或数组的问题是我的整个结构结果发生变化 – programmer

+0

我曾看过您的链接,即使在文档中提到:在将模型转换为数组或JSON时,所有其他属性都将隐藏: – programmer

+0

这是'makeHidden()'的预期行为。你也可以看看这个功能。 – PaladiN

1

我终于做到了以小的编程技巧

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

谢谢