Ir para conteúdo
Fórum Script Brasil
  • 0

Eloquent: o método Find


Frank K Hosaka

Pergunta

Ontem eu usei o método Find do Laravel pela primeira vez, e eu gostei muito dele, e só agora é que eu consigo enxergar a diferença entre o PHP e o Laravel.

Para saber a descrição de um produto, a gramática do MySQL é Select produto from tabela_produto where codigo = @codigo. 

A gramática do PHP é assim $query=$mysqli->query("select produto from tabela_produto where codigo = $codigo");

E a gramática do Laravel é assim $produto=tabela_produto::where('codigo',$codigo)->value('produto');

O problema dessa gramática é que ele sempre precisa estar conectado no banco de dados.

Tanto o PHP quanto o Laravel são capazes de jogar toda a tabela de produtos no terminal do cliente. A pergunta é: como o cliente vai consultar a tabela?

No caso do PHP, o desenvolvedor vai precisar da tecnologia do JavaScript.

Mas o Laravel já tem uma gramática mais robusta, olha só que bacana:

Model

class tbprod extends Model{
    use HasFactory;
    protected $table="tbprod";
    protected $fillable=['prod','custo','codforn','marg','loc','emb','cf','codbar'];
    protected $primaryKey="codprod";
    public function vinculados(){return $this->hasMany(tbprod::class,'codforn','codforn');}}

Controller

Public Function inicio(Request $request){
        $produtos=tbprod::all();
        $vinculados=tbprod::with('vinculados')->where('codforn','like','{%')->orderBy('prod')->get();
        return view('multiplo',compact('produtos','vinculados')); }

Blade

<table class="table table-striped">
@foreach($vinculados as $vinc)
    <tr><td>Produto Principal<td>{{$produtos->find(json_decode($vinc->codforn)->cod)->prod}}
    <tr><td>Produto Vinculado<td>{{$vinc->prod}}
@endforeach
</table>

Eu adaptei o meu código baseado numa sugestão do Lary do Laracasts, mas ele apagou a sugestão, e assim não sei se é necessário a "relação" vinculados que foi definido no Model. O importante é o arquivo blade, onde usei pela primeira vez o método find. A tabela produto tem o campo codforn, por exemplo, "banana dúzia", codprod=15, codforn=1234. Depois eu criei o produto "banana peça", codprod=16, codforn='{"cod":15,"conv":12}'.

A banana peça está amarrado com o código 15. Para saber quem era o código 15, eu forçava o Blade a conectar com o banco de dados assim

{{app\models\tbprod::where('codprod',$codprod)->value('prod')}} e essa conexão era repetida tantas vezes para quantos produtos vinculados houvesse. Já o find faz o mesmo serviço, mas sem precisar de nenhuma conexão.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...