2011-09-16 44 views
0

私は小さなウェブサイトを作るためにcakePhpを使い始めています。私はテーブル間の関係を定義しました。私は知りたい:それらの関連データは毎回ロードされますか?現在のビューに依存するため、リンクされたテーブルは使用されず、実際には毎回クエリされます。cakePhpの外部キー定義:遅延読み込みですか?

それは私たちにもたらすものにとって大きなコストですね。

このような関係をどのようにして、必要なときにのみアクティブにするのですか?私はそれが必要な場合にのみ、関連するテーブルをロードするいくつかの種類の遅延ロード?

答えて

1

ケーキはあなたのクエリを実行するために必要でないモデルのバインドを解除するために機能します。

$this->unbindModel(array($relation => $model));

$の関係は - あなたの他のモデルとあなたの関係です。

$モデル - モデル名。

eg: $this->Library->unbindModel(array('belongsTo' => array('Membership'),),false);

http://bakery.cakephp.org/articles/cornernote/2006/12/10/unbindall

1

@rikyにより述べたようにその使用unBindModel後、最初適切recursiveレベルを使用してみてください。 recursiveレベル2を使用していて、望ましくないすべてのモデルのバインドを解除するような、愚かなことはしないでください。

1

will those related data loaded every time?データ:いいえ。モデル:はい、関連するモデルが初期化されます。

Because depending of the current view, some linked table will never be used, and actually they are queried every time.使用可能またはrecursiveを使用してください。

It's a big cost for what it brings to us, no?多分、もしあなたがたくさんの関係を持っていれば、そうでなければ、もっと便利です。

So how to have this kind of relationship and activate it only when we need it? Some kind of lazy loading which loads the related table only if I need it?遅延読み込みは利用できないと思います。その場でいつでもbindModelをバインドすることができます。しかし、再び、私はあなたが小さな最適化について心配していると思います。これらのモデルの読み込みには、通常、各要求に数ミリ秒かかるでしょう。

+0

私たちはIngresビューを使用していますので、私たちが行っていないすべてのリクエストが大きな時間を奪うことを保証します。私たちは参加するたびに2-3テーブルのビューに基づいているため、この構造を変更する方法はありません – J4N

関連する問題