Doctrine ORM — Naming strategy

Rafael Mello
PHPRio
Published in
3 min readNov 2, 2016

Atualmente possuímos diversas padronizações definidas pela comunidade do PHP, as famosas PSR. Claro, temos uma também para padronizar a forma que escrevemos o código em nossa aplicação, a PSR-2.

Hoje vou falar um pouco sobre naming strategy, uma configuração simples que pode fazer toda a diferença para você manter padronizações entre código-fonte PHP x Banco de dados.

O que é o naming strategy do Doctrine

Basicamente com naming strategy, conseguimos definir os padrões de nomenclaturas no banco de dados de acordo com nossa necessidade. O Doctrine já possui embarcado a opção de implementar naming strategy de underscore, podem é possível criar implementações customizadas de acordo com sua necessidade.

Porque usar naming strategy no Doctrine

  • Mantem o código-fonte padronizado de acordo com as regras de padronização utilizada;
  • Elimina a necessidade de especificar sempre o nome do campo quando a variável for diferente do padrão necessitado pelo banco de dados;
  • Mantem a compatibilidade do Doctrine com o banco de dados.

Regras de padronização do PHP para nomes de variaveis

No “PSR-2”, as variáveis devem ser escritas em underscore ou camel case, desde que uma vez adotado um estilo o mesmo seja utilizando em todo o projeto. Em outras palavras, o projeto não pode conter variáveis underscore e camelcase, somente um estilo ou outro.

No “symfony”, padrão de codificação que trata-se de uma mistura do PSR-2 com mais implementações de boas práticas para desenvolvimento de bundles para o Symfony, as variáveis devem ser escritas em camel case obrigatoriamente. Vale lembrar que este padrão não exclusivo do Symfony e cada vez mais está tomando o lugar do PSR-2 independente de qual sistema ou framework que está sendo implementado no projeto.

Implementando o naming strategy do Doctrine ORM

Nativo(Sem framework)

No exemplo abaixo, estamos implementando o naming strategy sem usarmos uma framework PHP, anexando diretamente nas configurações do Doctrine nativo.

<?php//Considerando que a variável "$configuration" seja uma instancia do objeto de configuração do Doctrine ORM.
$nameStrategy = new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER);
$configuration->setNamingStrategy($nameStrategy);

Lembrando, CASE_LOWER é uma constante do PHP para textos em caixa baixa(lower case). Você poderá utilizar a constante CASE_UPPER no lugar desta se preferir que seus campos no banco de dados fiquem em caixa alta(UPPER CASE).

Symfony 2

No Symfony a partir da versão 2.7 LTS possuímos essa implementação já configurada como padrão, uma vez as boas práticas de codificação obrigam variáveis em camel case e no banco de dados o ideal seja utilizarmos underscore.

Para configurar caso esteja utilizando uma versão inferir, abra o arquivo config.yml localizado no diretório app/config e o configure de acordo com o exemplo utilizado abaixo.

doctrine:
orm:
naming_strategy: doctrine.orm.naming_strategy.underscore

Zend Framework 2

Em nenhum lugar da internet achei uma documentação de como implementar o naming strategy no Zend Framework 2, porem é muito simples e claro que explicarei isso para a comunidade PHP. :)

Por padrão no Doctrine para o Zend Framework 2 o nome exato da variável representa o nome do campo no banco de dados. Se escrevermos uma variável com o nome de $exemploVariavel o campo criado no banco de dados também se chamará exemploVariavel(quando suportado pelo SGBD, causando incompatibilidade entre Doctrine/Banco de dados).

Para configurar o naming strategy no Zend Framework, abra o arquivo de configuração correspondente ao DoctrineORMModule na pasta config/autoload. Normalmente é de costume incluir essas configurações nos arquivos global.php e/ou local.php.

return array(
'doctrine' => array(
'configuration' => array(
'orm_default' => array(
'naming_strategy' => new \Doctrine\ORM\Mapping\UnderscoreNamingStrategy(CASE_LOWER)
),
),
'entitymanager' => array(
'orm_default' => array(
'connection' => 'orm_default',
'configuration' => 'orm_default',
),
),
)
);

Assim como na forma nativa, usarmos o CASE_LOWER para textos em caixa baixa(lower case). Você poderá utilizar a constante CASE_UPPER no lugar desta se preferir que seus campos no banco de dados fiquem em caixa alta(UPPER CASE).

Links uteis

  1. Instalando e configurando o Doctrine ORM
  2. Documentação para naming strategy customizadas(em inglês)
  3. Padrões de codificação “PSR-2”(im inglês)
  4. Padrões de codificação “symfony”(im inglês)

Considerações finais

Usando esse recurso eliminamos a necessidade de ficarmos especificando o nome de cada campo manualmente e aumentamos a compatibilidade do Doctrine com o SGBD utilizado em seu projeto.

Um exemplo de compatibilidade é o Oracle, onde temos obrigatoriamente de usarmos o padrão de nomenclaturas em caixa alta e underscore.

Qualquer dúvida sobre essa implementação não deixem de perguntar ;)

Até a próxima pessoal!

--

--

Rafael Mello
PHPRio
Writer for

“Do or do not. There is no try.” — Yoda(Star Wars)