[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
André Cabral
Criador André Cabral 07/07/2019

Tenho duas tabelas relacionadas ( Cliente e Titulos ), gostaria de montar uma consulta por cliente com a soma de todos os títulos trazendo campos da tabela cliente.

Como faço no laravel essa agregação com o SUM?

 

MODEL CLIENTES

 

 public function titulo()

    {

        return $this->hasMany('App\Models\Titulo');

    }

 

 

MODEL TITULO

 

   public function cliente()

        {

            return $this->belongsTo('App\Models\Cliente');

        }

 

MIGRATION TITULOS

 

public function up()

    {

        Schema::create('titulos', function (Blueprint $table) {

 

           // cadastro padrão

            $table->increments('id');

            $table->string('referencia');

 

            $table->integer('tipo_id')->unsigned();

            $table->foreign('tipo_id')->references('id')->on('titulo_tipos');

 

            $table->integer('cliente_id')->unsigned();

            $table->foreign('cliente_id')->references('id')->on('clientes');

 

            $table->integer('devedor_id')->unsigned();

            $table->foreign('devedor_id')->references('id')->on('devedors');

 

            $table->integer('user_id');

 

            $table->date('vencimento_titulo')->nullable();

            $table->double('valor')->nullable();

            $table->string('status')->default('pendente');

            $table->timestamps();

 

            // fim cadastro padrão

 

 

        });

 

MEU CÓDIGO:

 

DB::table('titulos')

        ->join('clientes', 'titulos.cliente_id', '=', 'clientes.id')

        ->select('cliente_id', DB::raw('SUM(valor) as total'))

        ->groupBy('cliente_id')

        ->get();

Resultado:

CLIENTE_ID      |  | SUM(TITULOS.VALOR)

cliente A           |  | R$ 8000      

cliente B           |  | R$ 15000

 

Resultado desejado:

 

CLIENTE.NOME |CLIENTE.CNPJ              | SUM(TITULOS.VALOR)

cliente A           | 01.200.300/00001-28 | R$ 8000      

cliente B           | 01.200.300/00001-28 | R$ 15000

Criador André Cabral 07/07/2019

NO MYSQL FUNCIONA ASSIM:

 

SELECT 

clientes.id,

clientes.nome,

clientes.cnpj,

(SELECT SUM(titulos.valor) FROM titulos where titulos.cliente_id = clientes.id ) as total

from

clientes ;

PORÉM GOSTARIA DE FAZER NO LARAVEL

André Cabral
Manager Carlos Ferreira 07/07/2019

Olá, André!
Tudo bem?

Nesse curso aqui faço diversas consultas SQL bem avançadas, inclusive relacionadas a SUM: https://academy.especializati.com.br/curso/laravel-graficos

Você pode usar o método RAW, exemplo:
->select(DB::raw('sum(nometabela.valor) as total'))

No caso, como está aplicando a consulta SQL em mais de uma tabela, você precisa especificar exatamente qual coluna pertence a tabela.

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!