Tengo un problema con la paginación.
todo funciona bien sin errores, pero el problema es que cuando uso makeHidden con mi código, cambia la estructura de mi resultado de paginación json
este es mi codigo
$result = Job::where('user_id','=',Auth::id())->paginate(5); $result= $result->makeHidden(['hasMessage']);sin la segunda línea el resultado es
{ 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 } ] }pero cuando uso
$result= $result->makeHidden(['hasMessage']);Obtuve
[ { id: 4, sid:125, } ]alguna idea por favor ? ? ¿Es un error o hay algo mal? ?
hasMessage es un campo adjunto, no una columna real
finalmente lo hice con un pequeño truco de programación
$paginator = Job::where('user_id','=',Auth::id())->paginate(5); $data = $paginator->makeHidden(['hasMessage']); $paginator->data = $data; return $paginator;gracias
si desea conservar los datos de paginación, use los getCollection() y setCollection() :
$paginator = Job::where('user_id','=',Auth::id())->paginate(5); $paginator->setCollection($paginator->getCollection()->makeHidden(['hasMessage'])); return $paginator;Te falta toArray() en tu código. Debería ser como:
$result= $result->makeHidden(['hasMessage'])->toArray();Echa un vistazo a los documentos:
https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json
Editar:
También traté de paginate y devolvió la matriz modificada y es el resultado esperado para makeHidden() .
También podría echar un vistazo a la función:
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; } Como está haciendo array_merge , distorsiona su respuesta json.