Documentation Index
Fetch the complete documentation index at: https://docs-fw.madbuilder.com.br/llms.txt
Use this file to discover all available pages before exploring further.
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:
first();
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.