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

A soma de quase tudo


Frank K Hosaka

Pergunta

Em 2020 comecei a estudar o PHP, e lá eu conheci o mysqli que o PHP usa para trabalhar com o banco de dados do MySQL.

Em 2022 comecei a estudar o Laravel, e lá eu conheci o Eloquent, ele faz a mesma coisa que o mysqli do PHP mas usa uma gramática bem mais robusta, uma verdadeira obra de arte.

O problema é: quantas vezes eu posso usar o mysqli ou o Eloquent?

Como eu apanho muito para trabalhar com vetores, eu pedi para o mysqli ou o Eloquent olhar três vezes o banco de dados, uma vez para consultar os lançamentos do dia, outra vez para somar os débitos daquele dia e mais uma vez para consultar a soma dos créditos daquele dia.

Eu acordei de madrugada, e decidi estudar os vetores do PHP, e lá vi array_sum, array_filter, array_column. Foram várias tentativas e erros e nenhuma deu certo, mas finalmente consegui achar uma solução:

<?php
// tbdiario (docto,lcto,dia,contad,contac,valor,historico)
// docto : auto_increment, primary_key
$mysqli=new mysqli("localhost","root","","laravel");
$query=$mysqli->query("select * from tbdiario where dia='2023-07-22'");
$extrato=$query->fetch_all(MYSQLI_ASSOC);
$debito=[];
$credito=[];
foreach($extrato as $key=>$sub){
    if($sub['contad']){$debito[]=$sub['valor'];}
    if($sub['contac']){$credito[]=$sub['valor'];}}
var_dump(array_sum($debito),array_sum($credito));

E no Laravel, ficou assim:
 

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\tbdiario;
use App\Models\tbsupervariavel;
use Auth;
class DiarioController extends Controller {

public function extrato(Request $request) {
    if($request->input('dia')){
     tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);}
    $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia');
    $extrato=tbdiario::where('dia',$dia)->get();
    $debito=[];
    $credito=[];
    foreach($extrato->toArray() as $key=>$sub){
        if($sub['contad']){$debito[]=$sub['valor'];}
        if($sub['contac']){$credito[]=$sub['valor'];}}
    $somad=array_sum($debito);
    $somac=array_sum($credito);
    return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);}
}

Se alguém sugerir usar a função soma no Collections do Laravel, eu tentei por dois anos e não consegui.

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Que coisa boa! Encontrei um tópico no fórum Laracasts que me ensinou como usar o Collections do Laravel:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\tbdiario;
use App\Models\tbsupervariavel;
use Auth;
class DiarioController extends Controller {

public function extrato(Request $request) {
    if($request->input('dia')){
     tbsupervariavel::where('codsuper',Auth::id())->update(['dia'=>$request->input('dia')]);}
    $dia=tbsupervariavel::where('codsuper',Auth::id())->value('dia');
    $extrato=tbdiario::where('dia',$dia)->get();
    $somad=$extrato->sum(function($ext){if($ext->contad){return $ext->valor;}});
    $somac=$extrato->sum(function($ext){if($ext->contac){return $ext->valor;}});
    return view('diario',compact('extrato'),['somad'=>$somad,'somac'=>$somac]);}
}

 

Link para o comentário
Compartilhar em outros sites

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,3k
×
×
  • Criar Novo...