domingo, 11 de março de 2012

Como filtrar dados do Entity ChoiceField em um formulário

Se você tem um formulário de uma entidade que tem relação com outra entidade, e a pessoa escolherá o objeto na tela através de um select, checkboxes ou radio buttons, você pode usar o tipo Entity na hora de criar o formulário, mas aparecerá todos os registros da tabela.


Caso deseje filtrar esses resultados, pode-se usar a opção class e query_builder do tipo Entity. Vamos ao exemplo:
Temos uma Entidade Produtos e queremos que somente apareça no select os produtos ativos. Então vamos a criação do campo no formulário:

$builder
    ->add('produto', 'entity', array(
        'class' => 'AplicativoPrincipalBundle:Produto',
 'query_builder' => function(ProdutoRepository $er) {
     return $er->findAllAtivosQueryBuilder();
        },
    ))

A opção class diz qual é a classe da entidade. Já a opção query_builder é onde você cria uma função anônima que retorna o queryBuider gerado pela função do seu repositório.
No repositório ProdutoRepository terá que ter a função findAllAtivosQueryBuilder, que irá retornar um queryBuilder como no exemplo abaixo:

public function findAllAtivosQueryBuilder()
{
    return $this->createQueryBuilder('p')
        ->where('p.ativo = :ativo')
        ->setParameter('ativo', '1')
     ->orderBy('p.nome', 'ASC');
}

Então na hora de gerar seu formulário o framework usará essa função para fazer a consulta. Com isso na sua tela, aparecerá somente os produtos ativos para serem escolhidos.

Nenhum comentário:

Postar um comentário