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

Projeto semiLaravel, eliminando a classe tabela [não deu certo]


Frank K Hosaka

Pergunta

** estou tentando implantar a condição between, e vejo que a ideia de eliminar a classe tabela está atrapalhando **

O Laravel tem uma pasta chamada Model e dentro dela tem um arquivo para cada tabela na forma de classe.

No projeto semiLaravel eu só trabalho no diretório raiz e pensei em eliminar a classe que representa a tabela, passando a tarefa de criar a classe tabela para o autoload, conforme a necessidade do código. Eu não sou capaz de criar um código desse tipo, mas o Copilot sim:
** o grande efeito colateral é a tela do VS Code, ele sempre vai reclamar que a classe tabela não existe **

listagem parcial do config.php
<?php
spl_autoload_register(function ($class) {
    $path = str_replace('\\', DIRECTORY_SEPARATOR, strtolower($class)) . '.php';
    if (file_exists($path)) {
        require $path;
    } else {
        eval("class $class extends bd {}");
    }
});

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 strtolower((new \ReflectionClass(static::class))->getShortName());
    }

    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);
    }
}

 

Editado por Frank K Hosaka
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...