KISS - Keep it simple, stupid!

CamposEnumBehavior, campos ENUM de maneira fácil

postado por João José Pedrini em 18/11/2008 01:28:02

Acabo de criar um Behavior para manipular campos ENUM de banco de dados MySQL. Tinha visto o código de capturar os valores do ENUM no Bakery porém não fiquei muito satisfeito com o método dentro da classe AppModel. Portanto, criei um Behavior que facilitou bastante minha vida.

Primeiramente, a extensão se encontra hospedado no Github no meu projeto Pedaços de CakePHP. Em seguida, explico como faz para configurar:

No seu Model:

var $actsAs = array (
    'CamposEnum' => array (
        'campos' => array (
             'campo_1','campo_2'
        )
    )
);

No seu Controller:

function beforeRender(){
    $listas = $this->Model->listas();
    $this->set(array_keys($listas),$listas);
}

Voalá, agora todos os seus campos ENUM serão exibidos como SELECT’s. Tomem bastante cuidado com o encoding de suas aplicações e banco de dados, tive alguns problemas nesta questão.

Posts relacionados:

  1. Fixtures, preparando os ingredientes Quando voc
  2. Manipulando arrays associativas no CakePHP Arrays, no
  3. Construindo uma select box com options condicionais utilizando cakephp e ajax Ao acompan
  4. Construindo uma aplicação completa com CakePHP Confiram e
  5. Traduzindo o core de sua aplicação CakePHP Muitos pro

Trackback

Faça o seu

Comentários (2)

  • 001

    rafaelbandeira3

    em 09/12/2008 07:41:37

    Vale lembrar que enum não é suportado por quebrar totalmente a portabilidade do aplicativo.
    E também que o uso dele fica meio sem sentido, tendo em vista que ele teria o objetivo de simplificar o desenvolvimento, já que para usá-los é necessária a criação de vários workarounds, quando o cake faria tudo automatizado se, invés disso, fosse usado uma relação ‘belongsTo’. Um método que pode ser utilizado é sobrescrever todos os métodos referentes a alteração de dados da tabela, para se certificar que os dados não serão mexidos, e sobrescrever o construtor para já pegar a lista e guardar em cache.

  • 002

    João José Pedirni

    em 09/12/2008 20:08:30

    Olá Rafael,

    A questão de portabilidade que você se refere é de Banco de Dados, certo? Realmente, são poucos os bancos que suportam, se não me engano somente MySQL e PostgreSQL 8.3+.

    É uma pena que poucos bancos implemente esta funcionalidade, pois definir uma restrição de domínio no Banco (além de lógico, na aplicação e no cliente), é sempre uma boa prática. E também, não acho que o Status de uma Pedido (ex.) tenha que ser uma entidade, não é algo muito conceitual.

    Mas concordo com você que sua solução é mais interoperável entre todos os bancos. Pensando no que você falou, dá até para fazer um outro behavior, ou mesmo atualizar este, que faça tudo isto de forma transparente. Se tiver algum tempo mexo melhor.

  • Faça seu comentário

Topo

2 Comentários


souÁgil