paginação com collection
Estou criando uma API com dados formatados por collection e com paginação, mas não está funcionando o que foi apresentado no curso
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.
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 é:
- {
- "current_page": 1,
- "total_pages": 1,
- "items_per_page": 10,
- "items": [
- {
- "id": 2,
- "title": "Anatomia Cardiovascular",
- "subtitle": "Quero ser Plantonista",
- "description": "Para começar pelo básico sem faltar nada, é fundamental ter conhecimento aprofundado em bioquímica.",
- "image_url": "https://s3-sa-east-1.amazonaws.com/guideline/jaleko/courses/02.png",
- "percent_concluded": 10
- }
- ]
- }
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
}
}
Nunca tentei alterar esses padrões de retorno do meta do pagination.
Mas, por que precisa alterar isso?
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!