Doctrineにクラス名からテーブルプレフィックスを削除させる方法は?

StackOverflow https://stackoverflow.com/questions/1813420

  •  06-07-2019
  •  | 
  •  

質問

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

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

ありがとう

役に立ちましたか?

解決

これとまったく同じシナリオがあり、それを解決する独自の関数を作成することになりました。この関数は、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つの注意-このメソッドでは、Doctrineが database_table_name をPHPに優しい ClassName に変換する贅沢がないため、自分でこれを行う必要があります。 こちら strtocamel 関数を使用しましたa>。

他のヒント

追加するだけ

className: CorrectName

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

scroll top