Skip to main content
Com uma conexão aberta com o BD, já podemos carregar objetos e para isso o Adianti Framework oferece diversas maneiras, vejamos algumas: Carregamento de objeto O código-fonte abaixo irá carregar as informações do registro 1 da tabela funcionario.
    TTransaction::open('exemplos');

    $funcionario = new Funcionario(1);

    TTransaction::close();
A query SQL gerada pelo código-fonte acima foi:
    SELECT * FROM funcionario WHERE (id = 1)
É importante ressaltar que: Funcionario é uma classe Active Record que trabalha em cima da tabela funcionario do BD. Carregamento estático de objeto Outra maneira de carregar um objeto (essa sem instanciar diretamente a classe) é realizar um carregamento por uma chamada estática de carregamento.
    TTransaction::open('exemplos');

    $funcionario = Funcionario::find(1);

    TTransaction::close();
O código-fonte acima irá gerar exatamente a mesma query que o exemplo anterior:
    SELECT * FROM funcionario WHERE (id = 1)

2.1. Qual a diferença entre o carregamento normal e o estático?

Acabamos de ver que os dois carregamentos de objetos demonstrados têm como resultado a mesma query, então ficamos com a pergunta: qual a diferença entre eles? A resposta é bem simples, o carregamento normal lança uma exceção quando não encontra o objeto, já o carregamento estático retorna NULL. Veja a diferença:
    try
    {
        TTransaction::open('exemplos');

        $funcionario = new Funcionario(9999);
        var_dump($funcionario);

        TTransaction::close();
    }
    catch (Exception $e)
    {
        TTransaction::rollback();
        new TMessage('erro', $e->getMessage());
        return false;       
    }
No caso acima, será lançada a seguinte mensagem de exceção: O objeto 9999 não encontrado em funcionario Carregamento estático:
    try
    {
        TTransaction::open('exemplos');

        $funcionario = Funcionario::find(9999);
        var_dump($funcionario);

        TTransaction::close();

    }
    catch (Exception $e)
    {
        TTransaction::rollback();
        new TMessage('erro', $e->getMessage());
        return false;       
    }
No carregamento estático, o objeto fica nulo. Como carregar o primeiro e o último objeto? O Adianti Framework fornece duas funções para resolver essas questões, são elas:
  1. first();
  2. last(). Essas duas funções estáticas devem ser usadas em uma classe de modelo (TRecord), assim o framework conseguirá carregar o registro da tabela correta. Veja abaixo dois exemplos, um para o primeiro registro e outro para o último:
    try
    {
        TTransaction::open('exemplos');

        $primeiroCliente = Cliente::first();
        $ultimoCliente   = Cliente::last();

        TTransaction::close();
    }
    catch (Exception $e)
    {
        TTransaction::rollback();
        new TMessage('error', $e->getMessage());     
    }
Os comandos SQL gerados foram:
    SELECT min(id) as id FROM cliente;

    SELECT * FROM cliente WHERE (id = 3);

    SELECT max(id) as id FROM cliente;

    SELECT * FROM cliente WHERE (id = 63294);
É possível notar que o framework primeiro identifica o primeiro e último IDs para depois carregar os dados do registro.