Páginas

11 de dezembro de 2009

Definições gerais de tabelas, relacionamentos automáticos e Behaviors

Definir Collation e Charset para todas as tabelas

Há determinadas definições de classes/tabelas que por vezes queremos generalizar. Uma delas é, concerteza, a collation e o charset das tabelas.

Para não termos que repetir todas essas definições em cada tabela basta colocar o seguinte no topo do ficheiro config/doctrine/schema.yml:
options:
collate: utf8_unicode_ci
charset: utf8



Relacionamentos automáticos entre tabelas
(Apenas para tabelas do tipo InnoDB)

Com Doctrine, é possivel relacionar automaticamente tabelas uma vez que através dos nomes das colunas é detectado se existe tabela associada a esse nome.

Para tal, basta definir o seguinte atributo no topo do ficheiro config/doctrine/schema.yml:
detect_relations: true
No exemplo seguinte, a tabela Entity relaciona com a tabela Category através do campo category_id:
Category:
columns:
id: { type: integer(4), primary: true, autoincrement: true }
name: { type: string(255), notnull: true }

Entity:
columns:
id: { type: integer(4), primary: true, autoincrement: true }
name: { type: string(255), notnull: true }
category_id: { type: integer(4) }
Como o campo category_id tem o mesmo nome da tabela Category, o relacionamento é automaticamente detectado.

Para ler mais sobre sintax abreviada em Doctrine sigam este link:
http://www.doctrine-project.org/documentation/manual/1_2/en/yaml-schema-files#abbreviated-syntax



Behaviors

Timestampable - gera automaticamente campos created_at e updated_at

Estes campos também são gerados automaticamente utilizando o atributo Timestampable na definição da classe. Assim, para gerarmos esses campos para a tabela Category:
Category:
actAs: { Timestampable: ~ }
columns:
...
Sluggable - gera automaticamete campo slug

Com este behavior o campo slug é gerado automaticamente para um ou vários campos duma tabela. Quando o objecto é guardado, a respectiva slug user friendly é criada:
Glossary:
actAs:
Sluggable:
unique: true
fields: [word]
canUpdate: true
columns:
word: { type: string(255), notnull: true, unique: true }
...

Mais sobre behaviors:
http://www.doctrine-project.org/documentation/manual/1_2/en/behaviors

Nenhum comentário:

Postar um comentário