2010-01-11 40 views
1

在Doctrine中提供了一个常量变量,允许您在由Doctrine代码生成的所有模型中设置一个全局标识符列。我想弄清楚如何覆盖/关闭此值,以便它不会在特定表中创建此列。如何重写Doctrine模型中的常量?

不变的是:

ATTR_DEFAULT_IDENTIFIER_OPTIONS

它得到一个自举PHP文件中设置并在数据库中自动创建相应的表。

示例代码:

// 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)); 

但是,如果我有一个表/模型,我并不需要一个“ID”列?

回答

3

只有当您没有指定任何其他列作为主键时,Doctrine才会创建此id列。

例如如果你使用:

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

它会生成一个名为id作为主键列,因为你没有在架构设置任何的PK。

但是,如果相反,你使用:

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

的谢胜利,例如不会产生id,所以你甚至需要重写任何常数。这导致了一个“问题”,因为Doctrine强迫你在桌面上至少有一个主键,这种或那种方式。它只是执行良好的做法:)

+0

haha​​ha这么简单,但由于某种原因,我一直想念它! :-)你达人。 – dnyce 2010-01-12 07:12:45