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

Eloquent: ajuntando três tabelas


Frank K Hosaka

Pergunta

Fazer orçamento na tela é mais ou menos difícil, botar no papel é bem mais complicado.

O Eloquent é engenhoso, ele consegue ajuntar as tabelas através de relações definidos no Model.

Para pegar essas informações, aí eu tive que improvisar:

arquivo app > Models > tbpedido.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;
class tbpedido extends Model 
{
    use HasFactory;
    public $timestamps=false;
    protected $table="tbpedido";
    protected $fillable=['ped','dia','vendido'];
    protected $primaryKey="ped";

    function hist()
    {
        return $this->hasMany(tbhistped::class, 'ped');
    }
}

arquivo app > Models > tbhistped.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class tbhistped extends Model 
{
    use HasFactory;
    protected $table="tbhistped";
    protected $fillable=['ped','codprod','unitario','subtotal','qt'];
    const UPDATED_AT=null;
    const CREATED_AT=null;

    function produtos()
    {
        return $this->belongsTo(tbprod::class, 'codprod');
    }
}

arquivo app > Models > tbprod.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class tbprod extends Model 
{
    use HasFactory;
    protected $table="tbprod";
    const UPDATED_AT=null;
    const CREATED_AT=null;
    protected $fillable=['prod','custo','codforn','marg','loc','emb','un','cf','codbar','venda'];
    protected $primaryKey="codprod";
}

arquivo app > Http > Controllers > Controlid.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\tbpedido;

class Controlid
{
  function pedido(Request $request)
  {
    $itens=tbpedido::with('hist.produtos')->where('ped',$request->pedido)->get();
    $num_rows=count($itens);
    if($num_rows==0)
    {
        return "
          <script>
            if(confirm('Não há nada para imprimir'))
            {
              location.replace('?Orcamento.inicio.<?=$ped?>')
            }
          </script>";
    }
    return view('controlidView',['itens'=>$itens,'ped'=>$request->pedido]);
  }
}

arquivo controlidView.blade.php
@include('menuView')
<table>
<tr class=fw-semibold><td colspan=7>Quitanda do Frank
<tr class=fw-semibold><td colspan=7>Pedido <?=$ped?> de <?=dbr($itens[0]->dia)?>
@foreach($itens as $item)
    <div style=width:200:word-break:normal>
    <tr><td colspan=7><?=$item->hist[0]->produtos->prod?></div>
    <tr><td class=text-end><?=$item->hist[0]->qt?>
        <td class=text-end><?=$item->hist[0]->produtos->un?>
        <td>x<td class=text-end><?=dec($item->hist[0]->unitario)?>
        <td>=<td class=text-end><?=dec($item->hist[0]->subtotal)?>
@endforeach
<tr class=fw-semibold><td>Total<td><td><td><td><td class=text-end><?=dec($itens[0]->total)?>
<tr class=h-2><td>---
</table>
<script>
    cabecalho.style.display='none'
    window.print()
    window.onafterprint=function()
    {
        location.replace("orcamentoInicio?ped=<?=$ped?>")
    }
</script>


 

Editado por Frank K Hosaka
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,2k
    • Posts
      652k
×
×
  • Criar Novo...