如何生成扩展自定义记录类的 Doctrine 模型/类

Posted

技术标签:

【中文标题】如何生成扩展自定义记录类的 Doctrine 模型/类【英文标题】:How to generate Doctrine models/classes that extend a custom record class 【发布时间】:2009-12-10 13:04:57 【问题描述】:

当我使用 Doctrine 从 Yaml/db 生成类时,每个 Base 类(包括表定义)都扩展了 Doctrine_Record 类。

由于我的应用程序使用一个主数据库服务器和(多个)从属数据库服务器,我需要能够使基类扩展我的自定义记录类以强制写入到主数据库服务器(如 here 所述)。 但是,如果我手动更改基类,当我使用 Doctrine 从 Yaml/db 重新生成我的类时,我会再次丢失它。

我需要找到一种方法来告诉 Doctrine 扩展我自己的 Base 类,或者找到使用 Doctrine 设置主/从数据库的不同解决方案。

示例生成模型:

abstract class My_Base_User extends Doctrine_Record

但是我需要它自动生成为:

abstract class My_Base_User extends My_Record

如果有任何不同,我将在新的 Zend Framework 1.9.6 应用程序中使用 Doctrine 1.2.1。

【问题讨论】:

相关:如果您尝试在 Symfony 项目中执行此操作,请参阅 ***.com/questions/4392713/… 【参考方案1】:

典型的,只要我提出问题,我就会设法找到答案。我在这里记录一下,以防其他人有同样的问题。

您可以将参数“baseClassName”传递给 generateModels* 方法,Doctrine 将使用它作为基本记录类。

例子:

Doctrine_Core::generateModelsFromDb('models', array('master'), array('generateTableClasses' => true, 'baseClassName' => 'My_Record'));

或使用 Cli:

$options['generate_models_options'] = array(
'pearStyle'             => true,
'baseClassPrefix'       => 'My_',
'baseClassName'         => 'My_Record',
'classPrefix'           => '',
'classPrefixFiles'      => false,
'generateTableClasses'  => true,
);

$cli = new Doctrine_Cli($options);

【讨论】:

【参考方案2】:

完美,谢谢!这很酷,因为我在类似版本 (1.9.x) 的 Zend Framework 项目中从我的 application.ini 中获取了学说选项。现在我可以简单地修改 ini 以添加 baseClassName,如下所示:

doctrine.generate_models_options.baseClassName = "BaseRecord"

再次感谢您节省了我自己解决这个问题的时间:)

【讨论】:

以上是关于如何生成扩展自定义记录类的 Doctrine 模型/类的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine 2 获取代理类的真实类名

Doctrine_Table 与从 BaseClass 扩展的类

如何检索包含所有关系记录的 Doctrine 记录?

Doctrine DQL 中的自定义运算符

如何创建自定义元素扩展类的新实例

Doctrine 不会生成继承类的属性