Как заставить Doctrine удалять префиксы таблиц из имен классов?

StackOverflow https://stackoverflow.com/questions/1813420

  •  06-07-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top