1

私はこの構造とテーブルを持つツリーモデルを持っています:

Rate:
id, model_name, object_id
1 , SocialPost, 12
public $belongsTo => array(
                'SocialPost' => array(
                    'className' => 'Social.SocialPost',
                    'foreignKey' => 'object_id',
                    'conditions' => array(
                        'Rate.object_id = SocialPost.id',
                    ),
                )
            )

SocialPost: id、file_id

public $hasOne = array(
    'File' => array(
        'className' => 'File',
        'foreignKey' => false,
        'conditions' => array(
            'File.id = SocialPost.file_id',
        ),
    ),
);

ファイル: id、タイトル


すべてのツリー モデル actAs 包含可能

このコードは SocialPostsController でうまく機能します:

$posts = $this->SocialPost->find('all', array(
        'limit' => 5,
        'contain' => array(
            'File'
        )

    ));

出力: http://pastie.org/private/9ixxufncwlr3tofgp8ozw

ただし、RatesController のこのコードは、すべての SocialPost に対して同じファイルを返します。

$mostRated = $this->Rate->find('all', array(
        'limit' => $count,
        'contain' => array(
            'SocialPost' => array(
                'File'
            )
        )

    ));

出力: http://pastie.org/private/lbqryo1gxgvxjb5omfwrw

ここで何が問題なのですか?

4

1 に答える 1

1

私はあなたの協会がすべて所属するべきだと思いますTo:

class Rate extends AppModel {
  public $belongsTo = array(
    'SocialPost' => array(
      'className' => 'Social.SocialPost',
      'foreignKey' => 'object_id',
    )
  );
}

class SocialPost extends AppModel {
  public $belongsTo = array(
    'File'
  );
}

そして、findコマンドは次のようになります。

$mostRated = $this->Rate->find('all', array(
  'limit' => $count,
  'contain' => array(
    'SocialPost.File'
  )
));

また、あなた'className' => 'Social.SocialPost'が正しいことを再確認します。これは、SocialPostモデルがと呼ばれるプラグインに存在することを意味しますSocial

于 2012-06-30T13:32:24.323 に答える