2011-08-03 11 views
0

私たちはCakephpを使った巨大なプロジェクトに取り組んでいます。 MySQLの使用を開始しましたが、現在はOracleに移行するよう求めています!さて、この素敵な仕事を始めました! :)CakePHP + Oracle + CamelCaseの列テーブル名の問題

私たちはではない cakephpパターンを使用していますが、テーブルとその列のためのラクダのケース名(これはクライアント要件でした)。

Oracleの列テーブル名は、テーブルの作成時に ""(二重引用符)の間に名前を付けるので、大文字と小文字が区別されます。もしそうでなければ、オラクルは大文字を付けました。

しかし、cakephpのオラクルドライブはcamelcased構成を無視して、フィールド名を常に大文字小文字を区別せずに解析し、名前をクエリ結果配列で小文字に変換します。

代わりの

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

私は

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

誰もがそれを克服するためにどのように任意のアイデアを持っていましたか?

+0

oracle dbms **の列名は大文字と小文字が区別されます。また、二重引用符で明示的に指定しないと、すべての名前が大文字になります。 – zerkms

+0

あなたは正しく、zerkmsです!私は質問を更新しました。 – colares

+0

更新: 変更CamelCase記法はオプションではありませんでした。 - Oracle用のCakePHPドライバの改良点(後で掲載することができます) - テーブルの名前をマッピングするスクリプトを作成しました(例:idperson => IdPerson)。それはおそらく最善の方法ではありません。少なくとも、クエリキャッシュを使用します。 ;) さらに、私たちは、MySQLとOracleの違い、CakePHPでのドライバの違いによって引き起こされる多くの問題に直面しています。 「ただ変化するドライバー」は純粋な錯覚であることはすでに知っています。しかし、予期しない問題が残っていました。これは良い紙になります。 私はあなたのすべてを投稿します。 – colares

答えて

1

私は、あなたのクライアントとの間で難しい話が必要だと思います。ラクダ・ケーシングが顧客の要件であれば、オラクルを使用すべきではありません。あなたは両方を持つことはできません。オラクルのすべてが大文字、表、列、ストアされたprocsを取得してリストが作成されるため、ハッキングされた混乱になります。

"Table1"ですべてをハッキングすることになります。 "Column1"は引用符で囲みます。これは高度に保守可能ではなく、すべてのOracle DBAはデータベース構造を見るときにコンテキストを切り替える必要があります。

あなたのクライアントは、Oracle標準に準拠しているか、Oracleを使用していないかのどちらかです。

+0

はい、マチナス!私たちはこの話を始めました。それから賢明で良い議論を得ることができます。 また、この引用符の動作についても学びましたが、「実際にCakePHP Oracle Driveを再コーディング/修正するのは本当に良い方法ですか?あなたが言ったように、我々はOracle標準に反対しているので、私たちはそうは思わない。 – colares

+0

私は個人的に私はそれが顧客が技術を処方し始めるときにそれが嫌いです。あなたは多くの分野の専門家を抱えています。そのため、選択したソフトウェア開発ベンダーである自分の分野の専門家を信頼できない場合、その関係は良いスタートにはなりません。 私たちの会社は通常、そのような行動をまったく楽しまないだけで、私たちは単純な英語でそれを書き留めます。 – Marthinus

+0

私たちはまだこれを扱っています。最終的な解決策を決定したら、私はここで共有します。 – colares