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

Projeto semiLaravel, introduzindo a função groupBy na classe bd


Frank K Hosaka

Pergunta

Para executar esse comando:

        $debitosAnteriores=array_column(tbdiario::groupBy('contad')
            ->select(['contad','sum(valor) as debito_anterior'],
            [['dia','<',$primeiroDia]]),'debito_anterior','contad');
        

eu precisei alterar a classe bd:

listagem parcial de config.php
<?php
class bd {
    private static $pdo;
    private static $initialized = false;
    private static $orderBy = '';
    private static $groupBy = ''; // Adicionando a variável para a cláusula GROUP BY

    static function initialize() {
        if (!self::$initialized) {
            $dsn = 'mysql:host=' . HOST . ';dbname=' . DBNAME;
            self::$pdo = new PDO($dsn, USER, PASSWORD);
            self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            self::$initialized = true;
        }
    }

    protected static function getPdo() {
        self::initialize();
        return self::$pdo;
    }

    protected static function getTableName() {
        return ''; // Será implementado na classe filha
    }

    public static function orderBy($column, $direction = 'ASC') {
        self::$orderBy = "ORDER BY $column $direction";
        return new static;
    }

    // Adicionando o método groupBy
    public static function groupBy($columns) {
        if (is_array($columns)) {
            $columns = implode(', ', $columns);
        }
        self::$groupBy = "GROUP BY $columns";
        return new static;
    }

    public static function select($columns = '*', $conditions = []) {
        self::initialize();
        $table = static::getTableName();
        if (is_array($columns)) {
            $columns = implode(', ', $columns);
        }
        $whereClause = '';
        if (!empty($conditions)) {
            foreach ($conditions as $condition) {
                $field = $condition[0];
                $operator = $condition[1];
                $value = $condition[2];
                $whereClause .= "$field $operator :$field AND ";
            }
            $whereClause = 'WHERE ' . rtrim($whereClause, ' AND ');
        }
        $sql = "SELECT $columns FROM $table $whereClause";
        if (self::$groupBy) {
            $sql .= ' ' . self::$groupBy;
            self::$groupBy = ''; // Reset groupBy after use
        }
        if (self::$orderBy) {
            $sql .= ' ' . self::$orderBy;
            self::$orderBy = ''; // Reset orderBy after use
        }
        $stmt = self::getPdo()->prepare($sql);
        if (!empty($conditions)) {
            foreach ($conditions as $condition) {
                $field = $condition[0];
                $value = $condition[2];
                $stmt->bindValue(":$field", $value);
            }
        }
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_OBJ);
    }
}

class tbdiario extends bd {
    protected static function getTableName() {
        return 'tbdiario';
    }
}

class tbconta extends bd {
    protected static function getTableName() {
        return 'tbconta';
    }
}

class tbusuarios extends bd {
    protected static function getTableName() {
        return 'tbusuarios';}}

 

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