Как заставить Doctrine удалять префиксы таблиц из имен классов? - PullRequest
3 голосов
/ 28 ноября 2009

Я использую Doctrine 1.1.5, и я хотел бы знать, есть ли какая-либо опция для удаления префикса таблицы из файлов и имен классов при вызове Doctrine :: generateModelsFromDb или Doctrine: :. generateModelsFromYaml 1005 *

Edit: Например, у меня есть таблицы, такие как mo_article, mo_language, mo_article_text и т. Д. Когда Doctrine генерирует модели (используя функции из вышеупомянутого), имена классов будут MoArticle, MoLanguage, MoArticleText, ... но я хочу, чтобы они были Article, Language , ArticleText ... Есть ли какая-либо опция в этих функциях, чтобы избежать добавления префиксов таблиц в имена классов моделей?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 сентября 2010

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

0 голосов
/ 11 августа 2010

Просто добавьте

className: CorrectName

для каждого определения таблицы, которое нужно изменить в файле schema.yml. Doctrine сгенерирует все файлы с шаблоном CorrectName, но все еще будет читать / писать из таблицы с префиксами.

...