[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Kelvin Ferreira Souza
Criador Kelvin Ferreira Souza 20/09/2018

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?

Criador Kelvin Ferreira Souza 20/09/2018

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'));

    }

Kelvin Ferreira Souza
Criador Kelvin Ferreira Souza 20/09/2018

E a minha rota ficou Route::any('/produtos/{setor}/{categoria}/', 'StoreController@buscaMenu')->name('buscaMenu');

Kelvin Ferreira Souza
Manager Carlos Ferreira 20/09/2018

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;

Carlos Ferreira
Criador Kelvin Ferreira Souza 20/09/2018

Boa tarde Carlos,

Muito obrigado pelas dicas, vou efetuar as alterações!

Abçs!

Kelvin Ferreira Souza
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!