0

私の CakePHP での関連付けは少しずれています。これが問題です。私はusersテーブルとテーブルを持っていcommentsます。送信を取得するときに、Comment.user_id == User.id を使用usersしてテーブルにテーブルを結合したいと考えています。comments

コメント モデル:

class Comment extends AppModel {
  var $name = 'Comment';
  var $belongsTo = array('User');

  var $hasMany = array(
    'CommentsLike' => array(
      'className' => 'CommentsLike'
    ),
    'Comment' => array(
      'className' => 'Comment'
    )
  );

  var $hasAndBelongsToMany = array(
    'User' => array(
      'className' => 'User',
      'joinTable' => 'comments',
      'foreignKey' => 'Comment.user_id',
      'associationForeignKey' => 'user_id'
    ),
    'Submission' => array(
      'className' => 'Submission'
    )
  );

ユーザー モデル:

class User extends AppModel {
  var $name = 'User'; 
  var $hasMany = array('Comment');

  var $hasAndBelongsToMany = array(
    'Comment' => array(
      'className' => 'Comment',
      'joinTable' => 'comments',
      'foreignKey' => 'Comment.user_id',
      'associationForeignKey' => 'user_id',
    ),  
    'Submission' => array(
      'className' => 'Submission',
      'order' => 'Submission.created DESC'
    )   
  );

をつかむとsubmission、それに対するすべてのコメントが取得されますが、usersテーブルに参加しません。これは私が望むものです

提出モデル:

class Submission extends AppModel {
    var $name = 'Submission';
    var $belongsTo = array(
      'User' => array(
        'className' => 'User'
      )   
    );  

    var $hasMany = array(
      'Comment' => array(
        'className' => 'Comment',
        'order' => 'Comment.created DESC',
        'conditions' => array(
          'Comment.deleted' => 0
        )   
      ),  
      'SubmissionsVote' => array(
        'className' => 'SubmissionsVote'
      ),  
      'SubmissionThumbnails' => array(
        'className' => 'SubmissionThumbnails'
      )   
    );

提出物を検索すると、次のように返されます。

[Submission] => Array
    (
        // removed for sake of stackoverflow length
    )

[User] => Array
    (
        [id] => 2
        [username] => bob_cobb
    )

[Comment] => Array
    (
        [0] => Array
            (
                [id] => 1
                [submission_id] => 112
                [comment] => this is a test comment
                [user_id] => 2
                [created] => 5 minutes ago
                [deleted] => 
                [parent_id] => 
            )

    )

ご覧のとおり、または同様のもの[Comment][0]も必要[Comment][0][User]です。

なぜ私はこれが欲しいのですか?commentsシンプル:テーブルから user_id の外部キーでコメントした人のユーザー名を取得したい。私はドキュメントとチュートリアルを読みましたが、これに近づいていると確信していますが、何が私を妨げているのかわかりません.

テーブルのスクリーンショットは次のcommentsとおりです。 コメント表

usersテーブル構造 のスクリーンショットを次に示します。ユーザー テーブル

4

1 に答える 1

0

いくつかのオプションがあります。

Submissionモデルのrecursiveプロパティを、関連するデータを取得するために必要なレベルに設定します(http://book.cakephp.org/2.0/en/models/model-attributes.html#recursiveを参照) 。

または(より望ましい)Containable動作(http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.htmlを参照)を使用して、返す関連データを指定します。

class Submission extends AppModel

    public $actsAs = array('Containable');

}

あなたの発見でこのようにそれを使ってください:

$data = $this->Submission->find('all', array(
    'conditions'=>array(your conditions here),
    'contain'=>array(
        'User,
        'Comment'=>array(
            'User'
        )
    )
));

ほとんどの人はすべてのモデルで包含可能を使用するので、それをAppModelに追加し、AppModel::recursiveを-1に設定します

于 2013-01-08T10:26:15.017 に答える