0

Cakephp でサポートされていない古いデータベース ドライバー ( ora_logon ) を使用して、Oracle データベースで作業する必要があります。代わりに oci ドライバーを使用することはできません。

現在、私は次のことを行っています: すべてのモデルのすべてのメソッドがデータベースに接続し、データを取得します

class SomeClass extends Model {
    public function getA(){
        if ($conn=ora_logon("username","password"){
            //make the query
            // retrieve data
            //put data in array and return the array
        }
    }

    public function getB(){
        if ($conn=ora_logon("username","password"){
            //make the query
            // retrieve data
            //put data in array and return the array
        }
    }
}

私はそれが最善の方法ではないことを知っています。データベースへの接続の開閉を Cakephp に任せて、モデルにデータのみを取得させるにはどうすればよいでしょうか? データベースの抽象化レイヤーには興味がありません。

4

2 に答える 2

0

独自の OracleBehavior を作成できると思います。各モデルはこの動作を使用できます。その中で、モデルの find() 動作を上書きまたは拡張して、従来のオラクル クエリを作成し、それを実行できます (私は Oracle についてあまり知りません)。

次に、ビヘイビアーのbeforeFind()で接続を開き、ビヘイビアーのafterFind()でデータベース接続を閉じることができます。

そうすれば、クエリが実行される前に毎回自動的に接続が開かれ、検索のたびに接続が閉じられます。beforeSave() と afterSave() と beforeDelete() と afterDelete() でも同じことができます。(各 beforeX() メソッドでコードが重複しないように、 1 つのconnect()メソッドとBehavior 内のメソッドを作成することをお勧めします。disconnect()

于 2013-08-24T15:01:40.847 に答える