Nasıl Doktrin sınıf adlarından tablo önekleri silmek yapmak için?

2 Cevap php

Doctrine::generateModelsFromDb veya Doctrine::generateModelsFromYaml çağırırken dosya ve sınıf isimleri kaldır tablo öneki için bazı seçenek olup olmadığını bilmek için Doktrini 1.1.5 kullanıyorum ve ben isterim.

Edit: For example I have tables like mo_article, mo_language, mo_article_text, etc. When Doctrine generates the models (using the functions from above), the class names will be MoArticle, MoLanguage, MoArticleText, ... but I want them to be Article, Language, ArticleText... Is there some option in those functions to avoid adding table prefixes in model class names?

Teşekkür ederim

2 Cevap

Ben bu aynı senaryo vardı ve bunu çözmek için kendi işlevi yazma sona erdi. Bu fonksiyon, benim YAML dosyası gider her tablo adı okur ve tablo öneki olmadan uygun className: giriş ekler.

İşte fonksiyonu bulunuyor:

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);
}

Ve burada bunu kullanmak nasıl:

Doctrine_Core::generateYamlFromDb($yamlPath);
AddClassNames($yamlPath);
Doctrine_Core::generateModelsFromYaml($yamlPath, 'models',
    array('doctrine'), 
    array('generateTableClasses' => true,));

Bir başka Not - Bunu kendiniz yapmak zorunda böylece bu yöntem ile, PHP-dostu ClassName için database_table_name dönüştürme Doktrini lüksümüz yok. I-here arasındaki strtocamel işlevi kullanılır.

Sadece eklemek

className: CorrectName

Her tablo tanımı için size schema.yml dosyasında değiştirmeniz gerekir. Doktrin CorrectName deseni ile tüm dosyaları oluşturmak ama yine öneki tablosundan okuma / yazma olacaktır.