3

Doctrine 1.1.5 を使用していますが、 Doctrine::generateModelsFromDbまたはDoctrine:: generateModelsFromYamlを呼び出すときに、ファイルとクラス名からテーブル プレフィックスを削除するオプションがあるかどうかを知りたいです。

編集: たとえば、mo_article、mo_language、mo_article_text などのテーブルがあります。Doctrine が (上記の関数を使用して) モデルを生成すると、クラス名は MoArticle、MoLanguage、MoArticleText になりますが、Article にしたい、Language、ArticleText... モデル クラス名にテーブル プレフィックスを追加しないように、これらの関数にオプションはありますか?

ありがとうございました

4

2 に答える 2

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

もう 1 つ注意してください。この方法では、Doctrinedatabase_table_nameを PHP 対応の に変換するClassName余裕がないため、自分で行う必要があります。ここstrtocamelから機能を使用しました。

于 2010-09-12T04:18:14.073 に答える
0

追加するだけ

className: CorrectName

schema.yml ファイルで変更する必要がある各テーブル定義に。Doctrine は、すべてのファイルを CorrectName パターンで生成しますが、プレフィックス付きのテーブルから読み書きできます。

于 2010-08-10T21:43:41.800 に答える