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

Projeto semiLaravel: a $opcao


Frank K Hosaka

Pergunta

O Copilot é uma excelente ferramenta, o problema é que ele faz exatamente o que você pede, e agora tenho uma classe bd que ficou enorme, e mesmo assim surge um problema novo que os métodos da classe bd não são capazes de resolver.

Esse é o caso do método first, eu precisava do último registro de uma tabela, e o copilot sugeriu alterar o código para
 

self::$orderBy = "ORDER BY ped DESC";

Isso resolve o meu problema no curto prazo, mas lá frente, eu sei que vou precisar ordenar de forma diferente, assim decidi mudar o método por conta própria e eu criei o argumento $opção, e o código ficou assim:

 

static function first($columns = '*', $conditions = [],$opcao = null) {
        self::initialize();
        $table = static::getTableName();
        if (is_array($columns)) {
            $columns = implode(', ', $columns);
        }
        $whereClause = '';
        self::$bindings = [];
        if (!empty($conditions)) {
            foreach ($conditions as $condition) {
                $field = $condition[0];
                $operator = $condition[1];
                $value = $condition[2];
                if ($operator == 'BETWEEN' && is_array($value)) {
                    $whereClause .= "$field BETWEEN :{$field}_start AND :{$field}_end AND ";
                    self::$bindings["{$field}_start"] = $value[0];
                    self::$bindings["{$field}_end"] = $value[1];
                } else {
                    $whereClause .= "$field $operator :$field AND ";
                    self::$bindings[$field] = $value;
                }
            }
            $whereClause = 'WHERE ' . rtrim($whereClause, ' AND ');
        }
        $sql = "SELECT $columns FROM $table $whereClause";
        if($opcao) {
            $sql .= ' '.$opcao;
        }
        $sql .= ' LIMIT 1';
        $stmt = self::getPdo()->prepare($sql);
        foreach (self::$bindings as $key => $value) {
            $stmt->bindValue(":$key", $value);
        }
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_OBJ);
        self::$result = $result ? [$result] : [];
        return $result;
    }

Agora, posso escrever tbpedido::first('*',[],'ORDER BY ped DESC"). É claro que isso está bem longe de parecer com o Eloquent do Laravel, é por isso que dei o nome de semiLaravel ao projeto.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Parece que você está se referindo a um projeto utilizando o Laravel, possivelmente algo como uma opção ou uma solução dentro do projeto. Poderia explicar um pouco mais sobre o que você está tentando fazer ou qual é a dúvida que você tem em relação a isso? Assim posso te ajudar melhor! Agisoft Metashape 

Editado por Para Pc
Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, Para Pc disse:

Parece que você está se referindo a um projeto utilizando o Laravel, possivelmente algo como uma opção ou uma solução dentro do projeto. Poderia explicar um pouco mais sobre o que você está tentando fazer ou qual é a dúvida que você tem em relação a isso? Assim posso te ajudar melhor! Agisoft Metashape 

Bom dia, eu só estou tentando entender a linguagem de objetos, estou bem longe de dominar. O projeto semiLaravel me ensinou muita coisa, como mandar todas as solicitações para o index.php e de lá chamar as classes e objetos. No começo eu só usava o método get.

Eu não tenho  a menor ideia de como o Laravel consegue centralizar tudo no arquivo web.php, o máximo que eu consegui foi centralizar tudo no index.php. Nessa nova etapa do aprendizado eu tive a aprender a trabalhar com static function, eu ainda não entendi bem o que é.

Enfim, eu abandonei o projeto de imitar o Laravel, não vou fazer mais isso, vou usar um novo caminho, onde a prioridade não é mais a elegância e sim a praticidade, e assim eu criei o bd::x($sql,[param1,param2,...), ao invés de eu ter um monte de métodos para tentar abraçar a ideia do CRUD, a ideia é executar o CRUD em um menor número de métodos. O nome disso é tentativa e erro, e vou exibindo os códigos para ver se alguém pode me avaliar e ver quanta besteira estou fazendo. 

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