【问题标题】:How do you override a Constant in Doctrine's Models?您如何覆盖 Doctrine 模型中的常量?
【发布时间】:2010-01-11 08:41:19
【问题描述】:

在 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”列的表/模型呢?

【问题讨论】:

    标签: php orm variables doctrine constants


    【解决方案1】:

    仅当您没有将任何其他列指定为主键时,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 会以一种或另一种方式强制您在表上至少拥有一个主键。它只是强制执行良好做法:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-19
      • 2012-09-11
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      相关资源
      最近更新 更多