Rotas Dinamicas
[Concluído]
Boa noite,
Estou com uma dúvida em relação a rotas dinâmicas, se alguém poder me ajudar, vou explicar o meu caso: Eu tenho um menu listando os setores cadastrados e no dropdown dele eu tenho as categorias de cada setor, como criar as rotas com os parametros /produtos/{setor}/{categoria} e listar os produtos, ex: /produtos/mercearia/biscoitos sendo que eu tenho que passar para a rota os nomes e consultar no banco por id por ser chave estrangeira?
Consegui resolver, não sei dizer se é a forma mais correta de fazer, mas funcionou. Caso alguém tenha a mesma dúvida, segue abaixo:
Criei um metodo na minha controller
public function buscaMenu($setor, $categoria) {
$setores = Setor::all();
$pesqSetor = $setores->where('nome', $setor)->first();
$setorId = $pesqSetor->id;
$categorias = Categoria::all();
$pesqCategoria = $categorias->where('nome', $categoria)->first();
$categoriaId = $pesqCategoria->id;
$produtos = Produto::all();
$busca = $produtos->sortBy('produtoNome')
->where('produtoSetorId', $setorId)
->where('produtoCategoriaId', $categoriaId);
return view('store.categorias', compact('busca'));
}
E a minha rota ficou Route::any('/produtos/{setor}/{categoria}/', 'StoreController@buscaMenu')->name('buscaMenu');
Olá, Kelvin!
Obrigado por compartilhar a solução que encontrou;
Apenas um melhoria no seu controller, segue:
public function buscaMenu($setor, $categoria)
{
$pesqSetor = Setor::where('nome', $setor)->first();
if (!$pesqSetor)
return redirect()->back();
$pesqCategoria = Categoria::where('nome', $setor)->first();
if (!$pesqCategoria)
return redirect()->back();
[...]
}
Mas, podemos melhorar ainda mais, consumindo ainda menos consultas de banco de dados, com join, ou relacionamentos do Eloquent, nesse caso vou mostrar com o join:
public function buscaMenu($setor, $categoria)
{
$busca = Product::sortBy('produtos.produtoNome')
->join('setores', 'setores.id', '=', 'produtos.produtoSetorId')
->join('categorias', 'categorias.id', '=', 'produtos.produtoCategoriaId')
->where('setores.nome', $setor)
->where('categorias.nome', $categoria)
->get();
return view('store.categorias', compact('busca'));
}
No final com apenas um única consulta conseguimos ter o mesmo resultado, e o nosso controller ficou mais simples. Se quiser inclusive criar um método no Model Product para fazer esse filtro e deixar o controller ainda mais enxuto, recomendo!
Abs;
Boa tarde Carlos,
Muito obrigado pelas dicas, vou efetuar as alterações!
Abçs!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!