Com utilizar a o SUM no laravel com group by envolvendo duas tabelas?
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
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
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.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!