> ## 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.

# 07. Carregamento de coleções

O Adianti Framework oferece diversas maneiras de carregar coleções de objetos: com e sem filtros, definindo as colunas desejadas, etc. Veremos em detalhe os métodos de carregamento mais usados, começando com o carregamento mais simples de coleções, que pode ser escrito em uma linha do código-fonte:

```php theme={null}
    Classe::all();
```

## 7.1. Como carregar todos os registros de uma tabela?

O método `all()` irá carregar todos registros da tabela da classe usada. Um exemplo funcional seria:

```php theme={null}
    try
    {
        TTransaction::open('exemplos');

        $todos_funcionarios = Funcionario::all();

        TTransaction::close();
    }
    catch (Exception $e)
    {
        TTransaction::rollback();
        new TMessage('error', $e->getMessage());
    }
```

O comando SQL gerado pelo código-fonte acima é:

```php theme={null}
    SELECT 
        nome, sobrenome, dt_nascimento, funcao_id, cidade_id, endereco, cep, id 
    FROM 
        funcionario
```

O método `all()` não aceita filtros e sempre carregará todos os registros da tabela da classe instanciada. Como é possível observar pela query gerada, foram carregadas colunas nomeadas do banco de dados e não simplesmente um `select *`. Esse comportamento acontece pois o framework irá carregar apenas as colunas definidas como atributos dentro da Active Record `funcionario`.

Veja a classe `Funcionario`:

```php theme={null}
<?php

    class Funcionario extends TRecord
    {
        const TABLENAME  = 'funcionario';
        const PRIMARYKEY = 'id';
        const IDPOLICY   =  'serial'; // {max, serial}

        /**
         * Constructor method
         */
        public function __construct($id = NULL, $callObjectLoad = TRUE)
        {
            parent::__construct($id, $callObjectLoad);
            parent::addAttribute('nome');
            parent::addAttribute('sobrenome');
            parent::addAttribute('dt_nascimento');
            parent::addAttribute('funcao_id');
            parent::addAttribute('cidade_id');
            parent::addAttribute('endereco');
            parent::addAttribute('cep');
        }
    }
```

As colunas carregadas no SQL da função `all()` são exatamente as mesmas definidas no método construtor da classe `Funcionario` + a chave primária.

Portanto, se a tabela `funcionario` possuir uma coluna extra (`idade` por exemplo) não definida no método construtor, as informações de tal coluna idade não serão carregadas em comandos como o método `all()`.

## 7.2. Como carregar coleções com filtros

É possível carregar uma coleção com filtros de duas maneiras:

1. Carregamento estático;
2. Carregamento com API de critérios.

Veremos ambos em mais detalhes a seguir.
