Php 如何从类名中删除表前缀?

Php 如何从类名中删除表前缀?,php,orm,doctrine,Php,Orm,Doctrine,我使用的是Doctrine 1.1.5,我想知道在调用Doctrine::generateModelsFromDb或Doctrine::generateModelsFromYaml时,是否有从文件和类名中删除表前缀的选项 编辑: 例如,我有mo_article、mo_language、mo_article_text等表格。当Doctrine生成模型(使用上面的函数)时,类名将是MoArticle、MoLanguage、MoArticleText。。。但我希望它们是文章,语言,文章文本。。。这些函

我使用的是Doctrine 1.1.5,我想知道在调用Doctrine::generateModelsFromDb或Doctrine::generateModelsFromYaml时,是否有从文件和类名中删除表前缀的选项

编辑: 例如,我有mo_article、mo_language、mo_article_text等表格。当Doctrine生成模型(使用上面的函数)时,类名将是MoArticle、MoLanguage、MoArticleText。。。但我希望它们是文章,语言,文章文本。。。这些函数中是否有避免在模型类名中添加表前缀的选项

谢谢

只需添加

className: CorrectName

对于需要在schema.yml文件中更改的每个表定义。Doctrine将生成具有正确名称模式的所有文件,但仍从前缀表中读取/写入。

我有完全相同的情况,并最终编写了自己的函数来解决它。此函数遍历我的YAML文件,读取每个表名,并添加相应的
className:
条目,但不带表前缀

下面是函数:

const TABLE_PFX = 'tableName:';
const CLASS_PFX = 'className:';

function AddClassNames($yamlPath) {

  $tempFilePath = $yamlPath . '.old';
  rename($yamlPath, $tempFilePath);
  $tempFile = fopen($tempFilePath, 'r');
  $yamlFile = fopen($yamlPath, 'w');

  while (!feof($tempFile)) {
      $line = fgets($tempFile);
      fwrite($yamlFile, $line);
      if ($index = strpos($line, TABLE_PFX)) {
          $tableName = trim(substr($line, $index + strlen(TABLE_PFX) + 1));
          $className = substr($tableName, 4);
          $className = strtocamel($className);
          $classLine = str_replace(TABLE_PFX, CLASS_PFX, $line);
          $classLine = str_replace($tableName, $className, $classLine);
          fwrite($yamlFile, $classLine);
      }
  }
  fclose($tempFile);
  fclose($yamlFile);
  unlink($tempFilePath);
}
下面是我如何使用它:

Doctrine_Core::generateYamlFromDb($yamlPath);
AddClassNames($yamlPath);
Doctrine_Core::generateModelsFromYaml($yamlPath, 'models',
    array('doctrine'), 
    array('generateTableClasses' => true,));

还有一点需要注意的是,使用这种方法,您没有必要将
数据库表名称
转换为PHP友好的
类名
,因此您必须自己完成这项工作。我使用了来自的
strocamel
函数。

你在说什么表前缀?条令在生成模型时不会向表名添加任何内容。你有例子吗?嗨,克里斯,我已经编辑了这个问题并添加了一个例子。谢谢!