У меня был точно такой же сценарий, и я решил написать свою собственную функцию для его решения. Эта функция просматривает мой файл 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
функцию из здесь .