나는이 똑같은 시나리오를 가지고 있으며 그것을 해결하기 위해 내 자신의 기능을 작성했다. 이 함수는 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
함수를 사용했습니다.
어떤 테이블 접두사에 대해 이야기하고 있습니까? Doctrine은 모델을 생성 할 때 테이블 이름에 아무 것도 추가하지 않습니다. 모범이 있습니까? –
Chris, 안녕하세요. 질문을 수정하고 예제를 추가했습니다. 감사합니다. –