2010-01-11 5 views
1

Dans Doctrine, vous disposez d'une variable constante qui vous permet de définir une colonne Identificateur global dans tous les modèles générés par le code de Doctrine. J'essaie de comprendre comment je peux remplacer/fermer cette valeur afin qu'elle ne crée pas cette colonne dans une table spécifique.Comment remplacer une constante dans les modèles de Doctrine?

The Constant est:

ATTR_DEFAULT_IDENTIFIER_OPTIONS

Il se trouve dans un fichier PHP bootstrapped et il crée automatiquement la table appropriée dans votre base de données.

Exemple de code:

// set the default primary key to be named 'id', integer, 4 bytes, Auto Increment = true 
Doctrine_Manager::getInstance()->setAttribute(
Doctrine::ATTR_DEFAULT_IDENTIFIER_OPTIONS, 
array('name' => 'id', 'type' => 'integer', 'length' => 4, 'autoincrement' => true)); 

Mais si j'avais une table/modèle que je ne l'ai pas besoin d'une colonne "id" pour?

Répondre

3

Doctrine créera cette colonne id uniquement si vous n'avez spécifié aucune autre colonne comme clé primaire.

Si, par exemple, vous utilisez:

Example: 
    tableName: examples 
    columns: 
    sometext: string(12) 
    somedate: date(25) 
    sometimestamp: timestamp(25) 

Il générerait une colonne nommée id comme la clé primaire, comme vous na pas défini tout dans le schéma PKs.

Mais si, au contraire, que vous utilisez:

Example: 
    tableName: example 
    columns: 
    someint: 
     type: integer(10) 
     primary: true 
    sometext: string(12) 
    somedate: date(25) 
    sometimestamp: timestamp(25) 

L'exemple secound ne générerait pas l'id, de sorte que vous ne avez pas besoin même de passer outre une constante. Cela conduit à un «problème», car Doctrine vous oblige à avoir au moins une clé primaire sur vos tables, d'une manière ou d'une autre. Il applique juste la bonne pratique :)

+0

hahaha Si simple et pourtant pour une raison quelconque j'ai continué à le manquer !!! :-) Vous da man. – dnyce

Questions connexes