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

时间:2009-12-10 13:04:58

标签: php orm doctrine

当我使用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,如果它有任何区别。

2 个答案:

答案 0 :(得分:10)

典型的,一旦我提出问题,我就找到了答案。我在这里录制它,以防其他人有同样的问题。

您可以将参数'baseClassName'传递给generateModels *方法,Doctrine会将其用作Base记录类。

示例:

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

答案 1 :(得分:1)

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

doctrine.generate_models_options.baseClassName = "BaseRecord"

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