2009-11-28 4 views
3

나는 교리 1.1.5를 사용하고 있는데 나는 교리 :: generateModelsFromDb 또는 교리 :: generateModelsFromYaml를 호출하는 파일과 클래스 이름에서 제거 테이블 접두사에 대한 몇 가지 옵션이 있는지 알고 싶습니다.클래스 이름에서 Doctrine 테이블 접두사를 삭제하는 방법은 무엇입니까?

편집 : 예를 들어 I이 등 mo_article, mo_language, mo_article_text, 같은 테이블 교리는 모델 (위의 기능을 사용하여), 클래스 이름이 될 것입니다 MoArticle, MoLanguage, MoArticleText ...하지만 난을 생성 할 때 Article, Language, ArticleText가되기를 원합니다. 모델 클래스 이름에 테이블 접두어를 추가하지 않으려면이 함수에 몇 가지 옵션이 있습니까?

+0

어떤 테이블 접두사에 대해 이야기하고 있습니까? Doctrine은 모델을 생성 할 때 테이블 이름에 아무 것도 추가하지 않습니다. 모범이 있습니까? –

+0

Chris, 안녕하세요. 질문을 수정하고 예제를 추가했습니다. 감사합니다. –

답변

0

나는이 똑같은 시나리오를 가지고 있으며 그것을 해결하기 위해 내 자신의 기능을 작성했다. 이 함수는 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,)); 

하나 더 주 - 당신은 당신의 database_table_name로 변환 교리의 사치가 필요하지 않습니다이 방법으로 PHP에 호의적 인 ClassName입니다. 따라서 직접해야합니다. 나는 here에서 strtocamel 함수를 사용했습니다.

0

그냥 당신이 당신의 schema.yml 파일 파일에 변경해야하는 각 테이블 정의에

className: CorrectName 

를 추가 감사드립니다. Doctrine은 CorrectName 패턴을 가진 모든 파일을 생성하지만 접두사가 붙은 테이블에서 여전히 읽기/쓰기를 수행합니다.

관련 문제