我正在使用Doctrine 1.1.5,我想知道在调用 Doctrine :: generateModelsFromDb 或 Doctrine时是否有一些从文件和类名中删除表前缀的选项:: generateModelsFromYaml
编辑: 例如,我有像mo_article,mo_language,mo_article_text等表。当Doctrine生成模型(使用上面的函数)时,类名将是MoArticle,MoLanguage,MoArticleText,...但我希望它们是文章,语言,ArticleText ...这些函数中是否有一些选项可以避免在模型类名中添加表前缀?
谢谢
答案 0 :(得分:0)
添加
className: CorrectName
您需要在schema.yml文件中更改每个表定义。 Doctrine将生成具有CorrectName模式的所有文件,但仍然可以从前缀表中读/写。
答案 1 :(得分: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,));
还有一点需要注意 - 使用这种方法,您无法将您的database_table_name
转换为适合PHP的ClassName
,因此您必须自己完成此操作。我使用了here中的strtocamel
函数。