3

私がしようとすると:

// Removed the limit to ensure that all of the group notes items can be found and collapsed
$recent_notes = $this->User->Note->find('all', array(
    'recursive' => 2,
    'order' => 'Note.created DESC',
    'conditions' => $conditions,
    'contains' => array(
        'NotesUser', 'Poster', 'Comment' => array('Poster')
    )
));

出力をまったく制限しません。関連するすべてのモデルを取得します。ただし、 と指定しないrecursive場合2、または と指定すると1、モデルが欠落しComment=>Posterます。

必要なモデルだけを入手するにはどうすればよいですか? ありがとう!

4

3 に答える 3

8

必要なモデルのみを取得するには、[Containable behavior]を使用します。

  • 再帰を -1 に設定
  • あなたが持っているように、複数形ではなく'contain'単数形を使用してください'contains'
  • $actsAsモデルで変数を設定していることを確認してください。public $actsAs = array('Containable');

私が知っているすべての人$this->recursive = -1;は AppModel で設定します...これはすべてを再帰的な -1 にデフォルト設定するため、さらにデータを含めたい場合を除き、再度設定する必要はありません...そしてそのような場合、私はほとんどの場合、contain()ではなくを使用します$recursive.

于 2012-02-29T19:01:51.080 に答える
2

再帰は、contain を設定するとすぐに無視されます。

ドキュメントから:

ContainableBehavior には、Behavior がモデルにアタッチされているときに設定できる多くのオプションがあります。この設定により、Containable の動作を微調整し、他の動作をより簡単に操作できます。

recursive (boolean, optional)指定されたモデルをフェッチするために必要な再帰性レベルを containerable が自動的に決定できるように true に設定し、モデルの再帰性をこのレベルに設定します。false に設定すると、この機能が無効になります。デフォルト値は true です。

上記のように、配列キーが「含む」ではなく「含む」として設定されていることを確認してください。

$this->Post->find('all', array('contain' => 'Tag'));

また、containable 動作を正しく読み込んでアタッチしていると仮定しています。問題が発生した場合、ドキュメントはこちらにあります。

于 2012-02-29T19:03:55.783 に答える
1

履歴が Warehouse に属し、Warehouse が Company に属しているなどの深い関連付けがあり、Warehouse.Company のみが必要な場合は、次を使用することもできます。

'contain'   => array('Warehouse.Company')
于 2013-05-16T12:02:18.170 に答える