Как заставить Doctrine удалять префиксы таблиц из имен классов?
Вопрос
Я использую Doctrine 1.1.5, и я хотел бы знать, есть ли какая-либо опция для удаления префикса таблицы из файлов и имен классов при вызове Доктрина::generateModelsFromDb или Доктрина::generateModelsFromYaml.
Редактировать:Например, у меня есть такие таблицы, как mo_article, mo_language, mo_article_text и т.д.Когда Doctrine генерирует модели (используя функции из вышеописанных), именами классов будут MoArticle, MoLanguage, MoArticleText, ...но я хочу, чтобы это были Статьи, Язык, 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,));
Еще одно замечание - с помощью этого метода у вас нет такой роскоши, как преобразование Doctrine вашего database_table_name
к PHP-дружественному ClassName
, так что вы должны сделать это сами.Я использовал strtocamel
функция из здесь.
Другие советы
Просто добавьте
className: CorrectName
для каждого определения таблицы вам необходимо внести изменения в ваш файл schema.yml.Doctrine сгенерирует все файлы с шаблоном CorrectName, но по-прежнему будет выполнять чтение / запись из вашей таблицы с префиксом.