Doctrine + symfony 1.4 – Alterando o nome das sequences do Oracle utilizadas pelo Doctrine

A seguir veremos como alterar no symfony o nome das sequences utilizadas pelo Doctrine.

Por padrão, os nomes das sequences são gerados automaticamente pelo Doctrine seguindo o formato: nomeTabela_seq (‘%s_seq’)

Mas, onde e como posso alterar o nome das sequences, por um novo padrão ou definir um nome para cada modelo independentemente de um formato fixo, para meu banco de dados existente?

Para definir um nome diferenciado de sequence para cada modelo, você deve informar o parâmetro “sequence” na chave primária do modelo desejado em seu esquema do banco de dados (schema.yml). Por exemplo, digamos que o nome de sua sequence para o modelo (tabela) Area seja SEQ_AREA:


Area:
  tableName: AREA
  columns:
    cd_area:      { type: integer(3), primary: true, sequence: SEQ_AREA}
    descricao:    { type: string(255) }

Ao verificar o SQL da sequence na barra de ferramentas para debug web o nome da sequence ainda continua incorreto, pois será adicionado o padrão do Doctrine %s_seq:

SELECT SEQ_AREA_seq.nextval FROM DUAL

O Doctrine nos permite modificar uma série de configurações antes de carregar os modelos através das configurações globais. Você pode verificar as configurações disponíveis na documentação do Doctrine.

O atributo que precisamos alterar agora é o ATTR_SEQNAME_FORMAT que, como o nome sugere, modifica o formato do nome das sequences.
Os atributos globais são setados através da instância singleton Doctrine_Manager.

No symfony, as configurações globais do Doctrine são definidas na classe config/ProjectConfiguration.class.php
através do método configureDoctrine.

Vamos modificar então o atributo ATTR_SEQNAME_FORMAT, onde podemos definir o formato para aceitar qualquer
nome de sequence informado com o atributo “sequence” no schema:


<?php

require_once '/var/www/lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration{

  public function setup(){
    $this->enablePlugins('sfDoctrinePlugin', 'sfDoctrineGuardPlugin');
  }

  public function configureDoctrine(Doctrine_Manager $manager){
    $manager->setAttribute(Doctrine::ATTR_SEQNAME_FORMAT, '%s');
  }
}

Observação: Ao definir o nome da sequence com o atributo “sequence” no esquema do banco de dados, não deve-se utilizar o atributo “autoincrement: true”.

Directory Structure and CLI Cheat-Sheet – symfony 1.4

pt_BR: Muitos leitores do /webdev tem perguntado sobre as atualizações das referências rápidas (cheat-sheets) para as novas versões do framework PHP symfony.

Bem, aqui vai a primeira com a estrutura de diretório e as tarefas da linha de comando (CLI) do symfony, muito mais poderosa agora na versão 1.4 do framework.

As cheat-sheets serão atualizadas para a versão 1.4, porque esta é a versão LTS atual (com suporte de longo tempo).


en_US: Many readers of the /webdev have asked me about the updates of the cheat-sheets for new versions of the symfony framework.

Well, here’s the first one with the directory structure and tasks of the command line interface (CLI), much more powerful now in version 1.4 of the framework.

The cheat-sheets will be updated to version 1.4, because this is the current LTS version (Long Term Support).


Idiomas:

Calendário de Advento symfony: construindo a aplicação web 2.0 Jobeet em 24 dias

Jobeet

Isso mesmo! Neste ano de 2008 temos um novo calendário de advento symfony!

Novamente uma ótima oportunidade para aprender o framework symfony, agora na versão 1.2, através de uma série de tutoriais publicados todos os dias, entre o dia primeiro de dezembro e o Natal.

O objetivo é, a exemplo do askeet (publicado em 2005), termos no dia 24 a conclusão de uma aplicação web 2.0, dedicando 1 hora diária para ler os tutoriais e praticar. O nome desta aplicação é Jobeet e será um software de Job Board, ou quadro de vagas, de código aberto. Na aplicação será possível procurar por um trabalho ou propor um.

Os tutoriais, em inglês, são disponibilizados no seguinte endereço:
http://www.symfony-project.org/jobeet/1_2/en/

E, para quem não está familiarizado com o inglês, estou trabalhando nas traduções para o português e disponibilizando no site oficial em:
http://www.symfony-project.org/jobeet/1_2/pt_BR/

Aproveite!:)

symfony Q&A

Adicionada hoje, uma nova página ao blog, com o título symfony Q&A. Esta página é dedicada ao registro de dúvidas e respostas sobre o framework symfony, com o objetivo de compartilhar conhecimento com outros desenvolvedores, divulgar este espetacular framework aqui no Brasil e, também, para referências futuras.

Por enquanto é apenas uma lista inicial, mas estarei sempre atualizando com novos tópicos.

del.icio.us symfony

Empolgante notícia, no blog do symfony, confirmando que a nova versão da fantástica aplicação web 2.0 para social bookmarking del.icio.us, originalmente desenvolvida por Joshua Schachter e adquirida pela Yahoo!, está sendo desenvolvida com o framework symfony:

“What you might not know is that the next version of Delicious is built with symfony. Of course, Yahoo! extended and modified symfony to fit their needs, but what’s great is that they could actually do it, and that they will contribute their modifications back to the community in the form of plugins and bug fixes.”

O preview da nova versão já está há algumas semanas online para usuários convidados e screen shots podem ser visualizados na TechCrunch.

[Update – 01/02/2008] screen shots disponíveis em meu photoset no flickr.

Dica: Pesquisas case-insensitive com a classe Criteria

Para realizarmos uma pesquisa no banco de dados sem distinção entre letras maiúsculas e minúsculas (resultado usualmente obtido através das funções upper ou lower no SQL), com a classe Criteria, basta passarmos o parâmetro true para o método setIgnoreCase:

$c = new Criteria();
$c->add(AutorPeer::NOME_AUTOR, strtr($this->filters['autor'], '*', '%'), Criteria::LIKE);
$c->setIgnoreCase(true);
...

Uma dica simples, mas que pode poupar algum tempo de pesquisa na documentação😉

Referência: