5
respostas

Dúvida em Laravel

Trocar id pelo nome na listagem Abrir uma outra view com todas as informações do banco de cada id

https://github.com/rixardlisboa/alura.git

5 respostas

Oi Rixard,

Trocar o Id pelo nome seria em qual página especificamente? acredito que você possa fazer isso só trocando o método chamado nos dados de uma View, se você estiver chamando o método ->id, pode chamar ->nome.

Para você abrir uma outra view, você vai precisar seguir os seguintes passos:

1 - Criar uma rota para essa página, como vamos pegar dados, devemos utilizar o método GET

2 - Criar uma classe controller com um método que vai ser responsável por obter os dados do banco.

3 - Na rota que criamos, referenciar o nome do controller e o método separados pelo arroba @

4 - Neste método dentro do controller que criamos, chamamos o Model que contém os dados que você quer, por ex o model Banco.php que tem dentro do app.

5 - Verificar o método do componente do Laravel que fala com o banco de dados (Eloquent) que deve ser chamado, para exibir todas as informações, é comumente utilizado o método all $dados = Banco::all()

6 - Colocar estes dados recebidos pelo método Banco::all() em uma variável e incluir ela como segundo argumento do método view('minhapagina', $dados)

7 - Exibir os dados dentro da View, chamando os métodos correspondentes às colunas da tabela, ex:

foreach ($dados as $dado) {
    echo $dado->nome;
    echo $dado->agencia;
    echo $dado->conta;
}

Espero ter ajudado, se precisar de algo mais específico pode perguntar

@extends('layout')

@section('cabecalho') Produtos @endsection

@section('conteudo') @if(!empty($mensagem))

{{ $mensagem }}
@endif Adicionar
<ul class="list-group" style="margin-top: -25px">
    <table class="table table-hover">
        <thead style="background-color: #9d9d9d; color: white;">
        <tr>
            <td>ID</td>
            <td style="width: 40%">Nome</td>
            <td>Unidade</td>
            <td>Descrição</td>
            <td>Tipo</td>
            <td></td>
            <td></td>

        </tr>
        </thead>
        <tbody>
    <?php foreach ($produtos as $produto):?>
    <tr>
        <td><?= $produto->id ?></td>
        <td style="width: 40%"><?= $produto->nome ?></td>
        <td><?= $produto->unidade_de_venda ?></td>
        <td><?= $produto->descricao ?></td>
        <td><?= $produto->classe_id ?></td>

        <td><a href="/produtos/{{$produto->id}}" class="btn btn-info btn-sm"><i class="fas fa-edit"></i></a></td>
        <td>
            <form method="post" action="/produtos/remover/{{ $produto->id}}"
                  onsubmit="return confirm('Tem certeza que deseja remover {{ addslashes( $produto->nome )}}?')">
                @csrf
                @method('DELETE')
                <button class="btn btn-danger btn-sm"><i class="far fa-trash-alt"></i></button>
            </form>
        </td>
    </tr>
    <?php endforeach; ?>
    </tbody>
    </table>
    <div style="position: absolute; top: 115%; left: 70%; ">{{ $produtos->links() }}</div>

</ul>

@endsection

<?php

namespace App\Http\Controllers;

use App\Classe; use App\Produto; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request;

class ProdutosController extends Controller { public function index(Request $request) { $produtos = Produto::paginate(10); $mensagem = $request->session()->get('mensagem');

    return view('produtos.index', compact('produtos', 'mensagem'));
}
private function getClasses()
{

    $classesList = Classe::all();

    return $classesList;

}
public function create()
{
    $classes = $this->getClasses();
    return view('produtos.create', compact('classes'));
}

public function store(Request $request)
{
    $nome = $request->nome;

    $preco = $request->preco;
    $quantidade = $request->quantidade;
    $unidade_de_venda = $request->unidade_de_venda;

    $ean = $request->ean;
    $descricao = $request->descricao;
    $classe = $request->classe_id;

    $produto = new Produto();

    $produto->nome = $nome;
    $produto->preco = $preco;
    $produto->quantidade = $quantidade;

    $produto->unidade_de_venda = $unidade_de_venda;

    $produto->ean = $ean;
    $produto->descricao = $descricao;
    $produto->classe_id = $classe;

    $produto->save();
    $request->session()
        ->flash(
            'mensagem',
            "Produto {$produto->id} criado com Sucesso {$produto->nome}
            ");

    return redirect()->route('listar_produtos');
}

public function destroy (Request $request)

{

    Produto::destroy($request->id);
    $request->session()
        ->flash(
    'mensagem',
    "Produto removido com sucesso"
    );

return redirect()->route('listar_produtos');

}

}

Esta ai a view e control, na listagem de produtos aparece digitei classe_id que vem de uma tabela estrangeira, pois quando digito classe_nome da erro esta aparecendo o id da classe. e não consegui que aparecesse o nome da classe

O que eu quero é clicar em um item da lista, ex: produtos, e abrir uma view de informações sobre esse produto

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software