Eloquent sem persistência no banco
Opa, Carlos. Beleza?
Eu tenho um controller no laravel que faz uma requisição para uma api externa, usando o Guzle. E com esse retorno, alguns outros clientes consomem essa requisição no laravel, até aí ok.
Porém, existe a necessidade de paginar e filtrar esses dados.... a questão da paginação, até consegui usando o paginator, mas agora preciso filtrar esses dados e ficou meio complicado tratar sem o beneficio do eloquent.
Em resumo, consigo transoformar esse retorno em um model e usar os metodos do eloquent? Senão, o que você me recomenda nesses casos?
Olá, Rafael!
Blz, e com você?
Você vai precisar criar algo manual mesmo. Será necessário passar nas suas requisições com o Guzzle qual página exatamente vai precisar.
Nas suas views você cria as paginações, e passa o parâmetro "page" com o valor da página que deseja receber os resultados o no Guzzle você passa esse valor para a API retornar os próximos resultados.
Na questão da paginação, eu consegui...
Agora, qual a melhor forma de fazer uma busca? A requisição me retorna um obj parecida com essa:
$myArray = [
['id'=>1, 'title'=>'Laravel CRUD'],
['id'=>2, 'title'=>'Ajax CRUD'],
['id'=>3, 'title'=>'CORS Middleware'],
['id'=>10, 'title'=>'Laravel Pagination'],
]
Supondo que eu queira buscar pelo id e pelo titulo, não consigo fazer um orWhere, certo?
O ideal é fazer a busca na API, passando os parâmetros que deseja.
Agora, se tem todos os dados de um array é possível converter em uma collection e aplicar os recursos de where, orWhere e etc.
https://laravel.com/docs/7.x/collections#creating-collections
Esse projeto que estou usando está na versão 5.7 do laravel, consegui filtrar assim
$data = $collection->where('inscricao', $search);
Tentei usar o OrWhere, mas não deu certo, diz que o método não existe na classe de Collections. Uma outra solução que tentei foi essa:
$collection->filter(function ($value) use ($search) {
return (stripos($value['inscricao'], $search) ||
stripos($value['e_mail_solic'], $search) ||
stripos($value['tipo_tributo'], $search) ||
stripos($value['nome_solic'], $search));
});
Mas não retorna nada... tô fazendo algo errado?
Converte o valor para minúsculo, e tente novamente (strtolower)
dessa forma?
Continua o mesmo erro
Você armazenou esse retorno em uma variável?
$filtered = $collection->filter(function ($value, $key) {
// [...]
});
dd($filtered->all());
Não tinha feito isso antes, mas acontece a mesma coisa. Retorna vazio:
$search = '928121';
$filtered = $collection->filter(function ($value) use ($search) {
return (stripos(strtolower($value['inscricao']), $search) ||
stripos(strtolower($value['e_mail_solic']), $search) ||
stripos(strtolower($value['tipo_tributo']), $search) ||
stripos(strtolower($value['nome_solic']), $search));
});
dd($filtered->all());
--------------------------------------------------------------------------------
Quando eu coloco um dd em cima do return, ele retorna um objeto que está certo, mas em qualquer linha abaixo é nulo
$filtered = $collection->filter(function ($value) use ($search) {
dd($value);
return (stripos(strtolower($value['inscricao']), $search) ||
stripos(strtolower($value['e_mail_solic']), $search) ||
stripos(strtolower($value['tipo_tributo']), $search) ||
stripos(strtolower($value['nome_solic']), $search));
});
Utilizando o método where não foi?
https://laravel.com/docs/7.x/collections#method-where
Compartilha comigo o código fonte, no GitHub.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!