3

我正在使用 Doctrine 1.1.5,我想知道在调用Doctrine::generateModelsFromDbDoctrine::generateModelsFromYaml时是否有一些选项可以从文件和类名中删除表前缀。

编辑:例如,我有 mo_article、mo_language、mo_article_text 等表。当 Doctrine 生成模型时(使用上面的函数),类名将是 MoArticle、MoLanguage、MoArticleText,......但我希望它们是 Article , Language, ArticleText... 这些函数中是否有一些选项可以避免在模型类名称中添加表前缀?

谢谢

4

2 回答 2

0

只需添加

className: CorrectName

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

于 2010-08-10T21:43:41.800 回答
0

我遇到了完全相同的情况,最终编写了自己的函数来解决它。这个函数遍历我的 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,));

进一步说明 - 使用这种方法,您无法将 Doctrine 转换database_table_name为 PHP 友好的ClassName,因此您必须自己执行此操作。我使用了这里strtocamel的功能。

于 2010-09-12T04:18:14.073 回答