Propel 1.7用于访问相关对象的方法名称的双重复数形式

时间:2014-04-26 10:46:12

标签: mysql propel

我正在使用(第一次)推进1.7和随安装提供的propel-gen shell脚本。 schema.xml是使用propel-gen reverse从现有数据库生成的,然后使用propel-gen om生成类。

我的数据库结构以这样的方式构建,即它在单独的表中提供各种数据的翻译,具有一对多的关系。 这是一个例子:

TABLE 'buildings'
  'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
  'address' varchar(255) NOT NULL,

TABLE 'building_description_translations'
  'building_id' int(10) unsigned NOT NULL,
  'lang' varchar(2) NOT NULL,
  'description' varchar(1023) NOT NULL,

building_description_translations.building_idbuildings.id的外键。此外,building_description_translations的主键位于building_idlang列之上。

到目前为止,推进生成器就像魅力一样,除了用于从关系访问相关对象的方法名称最终被复数两次:

// file build/classes/myproject/om/BaseBuildings
class BaseBuildings{
    //...

    // note the TranslationSS
    public function getBuildingDescriptionTranslationss($criteria = null, PropelPDO $con = null)
    {
    //...
    }   

}

另外,我的build.properties文件看起来像(除了数据库配置):

propel.builder.pluralizer.class = builder.util.StandardEnglishPluralizer
propel.samePhpName = true
propel.addVendorInfo = true

有没有办法控制这种双重复数,而不会干扰现有的数据库模式?我已经找到了答案,但我找不到与这种情况相关的任何内容。

1 个答案:

答案 0 :(得分:0)

我明白了 - 最简单的方法是创建一个适合我需要的自定义Pluralizer类,基于原来的 generator\lib\builder\util\StandardEnglishPluralizer.php

让我们说新的Pluralizer是

generator\lib\builder\util\MyEnglishPluralizer.php

build.properties中,需要对多元化配置进行相应的修改。

propel.builder.pluralizer.class = builder.util.MyEnglishPluralizer

然后,使用propel-gen om

重新生成类

在我的情况下,我只需要在$_plural属性

中添加一个条目
protected $_plural = array(
        // ...
        'ons' => 'ons'
    );

注意:我已经使用了推进式安装提供的propel-gen脚本,而不是PEAR包中提供的脚本。