2011-08-03 4 views
0

우리는 Cakephp를 사용하여 거대한 프로젝트를 진행하고 있습니다. 우리는 MySQL을 사용하기 시작했지만 이제는 Oracle 로의 전환을 요청하고 있습니다! 자, 이제이 멋진 작업을 시작했습니다! :)CakePHP + Oracle + CamelCase 컬럼 테이블 이름 문제

우리는 cakephp 패턴을 사용하여이 아닌 입니다. 그러나 테이블과 해당 열에 대해서는 낙타가 포함 된 이름입니다 (클라이언트 요구 사항입니다!).

Oracle의 열 테이블 이름은 테이블을 만들 때 ""(큰 따옴표) 사이에 이름을 넣을 때 대/소문자를 구분합니다. 우리가하지 않으면 Oracle은 대문자를 씁니다.

그러나 cakephp의 오라클 드라이브는 camelcased 구성을 무시하는 것으로 보입니다. 필드 이름을 항상 대소 문자를 구분하지 않고 구문 분석하고 쿼리 결과 배열에서 이름을 소문자로 바꿉니다. 대신

$res['TableName']['ColumnName'] //camelcased 

내가

있어
$res['TableName']['columnname'] //lowercased! :(

사람이 그것을 어떻게 극복하기 위해 어떤 생각을 가지고 있습니까?

+0

oracle dbms **의 열 이름은 대소 문자를 구분합니다. 그리고 명시 적으로 큰 따옴표로 지정하지 않으면 모든 이름이 대문자입니다. – zerkms

+0

당신이 맞아요, zerkms! 질문을 업데이트했습니다. – colares

+0

업데이트 : 변경 CamelCase 표기법은 옵션이 아닙니다. - 오라클 용 CakePHP 드라이버 개선 (나중에 게시 할 수 있습니다!) - 테이블 이름을 매핑하는 스크립트를 만들었습니다 (예 : idperson => IdPerson). 그것은 아마도 최선의 방법이 아닙니다. 최소한 쿼리 캐시를 사용합니다. ;) 또한 우리는 CakePHP에서 MySQL과 Oracle의 차이점으로 인해 발생하는 많은 문제에 직면 해 있습니다. "그냥 변화하는 운전자"는 순수한 환상이라는 것을 이미 알고 있습니다. 그러나 여전히 예상치 못한 문제가있었습니다. 이것은 좋은 종이가 될 것입니다. 계속 게시 해 드리겠습니다. – colares

답변

1

나는 당신이 당신의 클라이언트와 어려운 말을해야한다고 생각합니다. 낙타 케이스가 고객의 요구 사항이라면 오라클을 사용하지 않아야합니다. 당신은 오라클의 모든 것이 대문자, 테이블, 컬럼, 저장된 procs 및리스트가 계속되기 때문에 하나의 해킹 된 엉망이 될 것입니다.

"Table1"을 사용하여 모든 것을 해킹 할 것입니다. "Column1"은 따옴표입니다. 이것은 고도의 관리가 가능하지 않으며 모든 Oracle DBA는 데이터베이스 구조를 볼 때 컨텍스트 전환이 필요합니다.

귀하의 클라이언트는 오라클 표준을 따르거나 Oracle을 사용하지 않아도됩니다.

+0

예, 마티 누스! 우리는이 이야기를 시작했습니다. 그러면 현명한 방법으로 좋은 주장을하게 될 것입니다. 우리는이 인용문 동작에 대해서도 알았지 만 요점은 "CakePHP Oracle Drive를 다시 코딩/수정하는 좋은 방법입니까?"라는 점입니다. 우리는 그렇게 생각하지 않습니다. 왜냐하면 우리가 오라클 표준에 반대했기 때문입니다. – colares

+0

개인적으로 나는 고객이 기술을 처방하기 시작할 때 그것을 싫어한다. 많은 분야의 전문가가 있으므로, 선택한 분야의 전문가 (이 경우 선택된 소프트웨어 개발 업체)를 신뢰할 수 없다면 관계가 좋은 출발을 의미하는 것은 아닙니다. 우리 회사는 대개 이러한 행동을 전혀 받아들이지 않습니다. 우리는 단지 우리를 평범한 영어로 쓰거나, 우리와 우리의 실적을 신뢰하거나 사업을하지 않습니다. – Marthinus

+0

우리는 여전히이 문제를 다루고 있습니다. 최종 솔루션을 결정한 후에는 여기에서 공유 할 것입니다. – colares