paginação com collection

Regina Weigert Criador 28/02/2019
Regina Weigert

Estou criando uma API com dados formatados por collection e com paginação, mas não está funcionando o que foi apresentado no curso

Manager Carlos Ferreira 28/02/2019
Carlos Ferreira

Olá, Regina!
Tudo bem?

Está dando algum erro? Se sim, qual?

Me mostra a sua implementação.

Se quiser subir o projeto para o GitHub, eu dou uma olhada.

No aguardo de mais detalhes.

Criador Regina Weigert 02/03/2019
Regina Weigert

Não está dando erro, mas a saída não é a que eu preciso criar. Preciso formatar exatamente como no item 1. Nao consigo pegar somente alguns dados do paginate

1. Endpoint que preciso é:

  1. {
  2. "current_page": 1,
  3. "total_pages": 1,
  4. "items_per_page": 10,
  5. "items": [
  6. {
  7. "id": 2,
  8. "title": "Anatomia Cardiovascular",
  9. "subtitle": "Quero ser Plantonista",
  10. "description": "Para começar pelo básico sem faltar nada, é fundamental ter conhecimento aprofundado em bioquímica.",
  11. "image_url": "https://s3-sa-east-1.amazonaws.com/guideline/jaleko/courses/02.png",
  12. "percent_concluded": 10
  13. }
  14. ]
  15. }

2. O eu controller tem o seguinte método

public function meuscursos(Request $request)

    { 

$id = $request['id'];

$qtd = $request['qtd'];

        $page = $request['page'];

       # cursos ja iniciados pelo aluno compondo o bloco meus Cursos

        $meuscursos = new meusCursosCollection(TopicoConcluido::distinct()

        ->join('java_curso','java_curso.cd_curso','=','rl_topico_concluido.cd_curso')

        ->join('tb_imagem_curso','tb_imagem_curso.cd_curso','=','java_curso.cd_curso')

        ->where('rl_topico_concluido.cd_usuario','=',$id)

        ->where('tb_imagem_curso.tipo','=',0)

        ->paginate($page));

return $meuscursos;

}

3. Na minha collection não consigo formatar os dados da paginação (metas) para exibir apenas "current_page", "total_pages" e "items_per_page"

 

use Illuminate\Http\Resources\Json\ResourceCollection;

use Illuminate\Pagination\LengthAwarePaginator;

use Illuminate\Pagination\Paginator;

 class meusCursosCollection extends ResourceCollection

{

    public function toArray($request)

    {

        return [

            

            'items' => $this->collection->transform(function($item){

 

                switch($item->cd_categoria_curso){

                    case "1": $categ = "Começando pelo Básico";break;

                    case "2": $categ = "Mergulhando na Clínica";break;

                    case "3": $categ = "Dominando o Internato";break;

                    case "4": $categ = "Quero ser Plantonista";break;

                    case "5": $categ = "Além da Medicina";break;

 

                }

return [  'id' => $item->cd_curso,

                    'title' => $item->tx_nome,

                    'subtitle' => $categ,

                    'description' => $item->tx_descricao_breve,

                    'image_url' => $item->arquivo,

                ];

            }),

        ];

  }

}

4 . Resultado que estou tendo é

{

    "data": {

        "items": [

            {

                "id": 65,

                "title": "Hospitais Privados",

                "subtitle": "Quero ser Plantonista",

                "description": "Pensando em ser plantonista de um hospital privado? Separamos o conteúdo de forma simples e objetiva para você",

                "image_url": "1519387736-curso-img-004.jpg"

            },

            {

                "id": 65,

                "title": "Hospitais Privados",

                "subtitle": "Quero ser Plantonista",

                "description": "Pensando em ser plantonista de um hospital privado? Separamos o conteúdo de forma simples e objetiva para você",

                "image_url": "1519388019-curso-img-002.jpg"

            }

        ]

    },

    "links": {

        "first": "http://localhost:8000/api/classroom/3/2/2?page=1",

        "last": "http://localhost:8000/api/classroom/3/2/2?page=23",

        "prev": null,

        "next": "http://localhost:8000/api/classroom/3/2/2?page=2"

    },

    "meta": {

        "current_page": 1,

        "from": 1,

        "last_page": 23,

        "path": "http://localhost:8000/api/classroom/3/2/2",

        "per_page": "2",

        "to": 2,

        "total": 45

    }

}

Manager Carlos Ferreira 04/03/2019
Carlos Ferreira

Nunca tentei alterar esses padrões de retorno do meta do pagination.

Mas, por que precisa alterar isso?

Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!