2

私は、オブジェクトの各インスタンスがデータベース内に関連するレコードを持つ独自のテーブルを持つ、変更不可能なレガシー データベース スキーマを使用しています。useTableモデルがインスタンス化されるたびにモデルを変更する必要がありますが、Cake の優れたキャッシングなどは保持します。

多くのパッド オブジェクトがあり、それぞれがいくつかのノート オブジェクトを持っているとします (ノートはパッドに属し、パッドは多くのノートを持っています)。各パッドにはパッド テーブルにレコードがありますが、すべてのノートにはデータベース内に独自のテーブルがあります (たとえば、'pad_{id}' というタイトル)。このスキーマは固定されており、使用する必要があります。

今のところ、保存を行う必要はないので、読み取りをサポートするために find の前にモデルでこれを行います。

function beforeFind($query_data) {
    if(empty($query_data['pad_id'])) {
        return false;
    } else {
        $this->useTable = $query_data['pad_id'];
        parent::__construct();
        return $query_data;
    }

}

これにより、データベースで使用されるモデルのテーブルが変更され、Core::debug > 0. ただし、ゼロの場合は、CakePHP がモデル コードをキャッシュして、適切にテーブルを変更していないと思います。いずれにせよ、/pads/view/{pad_id} にアクセスするか、このテーブルを動的に変更する何らかのアクションを実行すると、404 エラーが発生します。デバッグをオンにすると正常に動作するため、正確なエラーが何であるかはよくわかりません。したがって、この問題のデバッグに関する指針も役立ちます。

ありがとう!

4

2 に答える 2

9

setSource()モデルが使用しているテーブルを変更する ために使用できるはずです。$this->setSource('pad_x')テーブルを「pad_x」に設定し、モデルのスキーマをリセットします。API リファレンス

于 2009-10-08T13:41:12.840 に答える
1

var $persistModel = false; コントローラーまたは AppController で試してください。

参照: http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-speed-up-cakephp-apps/

于 2009-10-01T20:05:48.890 に答える