Doctrine 2.5 (et sûrement les versions antérieures) permet de mapper un champ d'une entité, en le définissant comme étant son identifiant.
La documentation parait complète, mais il y a quelques erreurs, et des informations de mapping qui ne sont pas reportées sur cette page.
Voici toutes les options possibles pour le mapping d'un identifiant, au format YML :
La documentation parait complète, mais il y a quelques erreurs, et des informations de mapping qui ne sont pas reportées sur cette page.
Voici toutes les options possibles pour le mapping d'un identifiant, au format YML :
Foo\Entity\Bar:
id:
id:
type: integer
generator:
strategy: NONE
options:
unsigned: false
column: id
associationKey: my_field
length: 50
columnDefinition: INT AUTO_INCREMENT UNSIGNED
sequenceGenerator:
sequenceName: message_seq
allocationSize: 100
initialValue: 1
customIdGenerator: Foo\CustomIfGenerator
tableGenerator: Foo\TableGenerator
- type : type du champ. Je n'ai pas testé tous les types de champs, certains peuvent ne pas fonctionner comme datetime. Liste des types de champs.
- generator [défaut : NONE] : même si la documentation dit que la valeur par défaut est AUTO, c'est bien NONE la vraie valeur par défaut (cf ClassMetadataInfo, valeur par défaut de $generatorType). Donc par défaut, aucune gestion automatique de l'identifiant n'est effectuée, c'est à vous de faire setId() "avant le persist()". La valeur AUTO est la bonne pour la majorité des cas.
- options : tableau d'options, chaque type de champ peut avoir ses options. Par exemple pour les types numériques, on peut spécifier unsigned.
- column [défaut : id] : nom de la colonne dans la base de données.
- associationKey : Voir la documentation.
- length [défaut : 255] : utilisé pour les types string et binary, pour indiquer la longueur maximale de la valeur stockée en base.
- columnDefinition : pour surcharger le code SQL généré dans le CREATE TABLE et ALTER TABLE.
- sequenceGenerator : configuration de la séquence, utilisée uniquement pour Oracle et Postgres.
- customIdGenerator : si aucune stratégie de génération d'identifiant ne vous convient, vous pouvez créer une classe qui doit étendre de Doctrine\ORM\Id\AbstractIdGenerator, et indiquer son fully qualified class name ici.
- tableGenerator : petite blague de Doctrine, même si c'est écrit dans la documentation : la configuration existe, mais elle n'est pas gérée, et lève une MappingException.
Pour résumer, voici la bonne configuration d'un mapping d'identifiant, pour la plupart des cas :
Foo\Entity\Bar:
id:
id:
type: integer # de -2 147 483 648 à 2 147 483 647 en MySQL
generator:
strategy: AUTO # IDENTITY pour MySQL, SQLite, MsSQL et SQL Anywhere, SEQUENCE pour Oracle et PostgreSQL
options:
unsigned: true # pas d'identifiants négatifs, change le maximum à 4 294 967 295
Aucun commentaire:
Enregistrer un commentaire