2017-11-09 16 views
2

私のCakePHP 2アプリケーションは、データベースからプルする際に、自分のアソシエーションからフェッチされたデータの量のために、パフォーマンス上の問題が発生しています。これの1つの例は、私のTask要素にあります。 Taskは多くがFiles,Commentsです。したがって、私がTaskをデータベースから引き出すと、Taskの詳細と、それに関連するFilesCommentsのすべての詳細と、Taskに関連するその他の関連付けと同様に、投稿されたユーザーそれら。データベースおよびそこからタスクを引いたときにCakePHP 2:関連するモデルの再帰的な制御

は、今私は、私は、データの量を制御するために、再帰的に使用できるということを知って、フェッチ:

$this->Task->recursive = -1 

が完全にフェッチされてから任意の関連付けを防止します。しかし、私はまだ CommentsFilesについての非常に基本的なデータを得ることができるようにしたい、私はちょうどラインの下にフェッチされた関連を減らすことができるようにしたい。何かのように:

$this->Task->Comment->recursive = -1 

私の関連するモデルの再帰を細かく制御する方法はありますか?

答えて

1

再帰レベルの関連付けを完全に制御するには、the containable behaviorを使用する必要があります。この動作は、あなただけのいくつかの関連レコードを選択することができます。また、このコードを使用することができますbehavio収容可能有効にするには、関連するモデルの一部のフィールドを選択することができます。

<?php 
class Post extends AppModel { 
    public $actsAs = array('Containable'); 
} 

そして、あなたが使用できるいくつかのフィールドとの関連のモデルを選択するために、このコード:

$this->Model->find('all', array(
    'contain' => array(
     'RelatedModel1', 
     'RelatedModel2' => array(
      'fields' => array('field1', 'field2'), 
     ), 
     'RelatedModel3' => array(
      'RelatedModel3RelatedModel' 
     ) 
    ) 
)); 
+1

これはトリックでした!本当にありがとう! –

+0

あなたは歓迎です:) –

関連する問題