Doctrineにクラス名からテーブルプレフィックスを削除させる方法は?
質問
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パターンですべてのファイルを生成しますが、それでもプレフィックステーブルからの読み取り/書き込みを行います。