Skip to main content
Para que o desenvolvedor conte o número de registros de uma tabela (sabendo apenas utilizar o carregamento de coleções), seria necessário contar o número de posições do vetor resultante da função load(). O Adianti Framework conta com a função count() , que torna essa tarefa mais fácil. O método count() deve ser usado da mesma maneira que a função load().
Atenção: o método load() não deve ser usado junto com a função select(), pois internamente ele realizará um comando select count(*).
A contagem de registros pode ser usada da forma estática ou com API de critérios. Primeiro veremos a forma estática.

14.1. Contagem estática

Um exemplo seria saber quantos funcionários começam com a letra A e tem 18 anos:
    try
    {
        TTransaction::open('exemplos');


        $funcionarios = Funcionario::where('nome', 'like', 'A%')
                                   ->where('idade', '=', 18)
                                   ->count();

        TTransaction::close();
    }
    catch (Exception $e)
    {
        TTransaction::rollback();
        new TMessage('error', $e->getMessage());
    }
O comando SQL gerado foi:
    SELECT
        count(*)
    FROM
        estado
    WHERE
        (nome like 'A%' AND idade = '18')
Ao utilizar a função count(), o desenvolvedor não terá o retorno em forma de vetor de objetos, mas sim o valor numérico resultante da contagem.

14.2. Contagem com API de critérios

Quando o critério de carregamento estiver montado, basta que o desenvolvedor use a função countObjects($criteria). Ela contará o número de registros ao invés de carregá-los, veja o exemplo:
    try
    {
        TTransaction::open('exemplos');

        $criteria = new TCriteria;
        $criteria->add(new TFilter('sexo', '=', 'M'));
        $criteria->add(new TFilter('nome', 'like', 'A%'));

        $numero_funcionarios = Funcionario::countObjects($criteria);

        TTransaction::close();
    }
    catch (Exception $e)
    {
        TTransaction::rollback();
        new TMessage('error', $e->getMessage());
    }
O comando SQL gerado foi:
    SELECT 
        count(*)
    FROM 
        funcionario
    WHERE 
        (sexo = 'M' AND nome like 'A%')