Jump to content
Fórum Script Brasil
  • 0

A soma de quase tudo


Frank K Hosaka

Question

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.

Edited by Frank K Hosaka
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.7k
×
×
  • Create New...