0

コメントに問題があります。私はユーザーモデルを持っています:

public $hasMany = array('Photo','Comment');

コメントモデル:

public $belongsTo = array(
            'User'=>array(
                'className'=>'User',
                'foreignKey'=>'user_id'
            ),
            'Photo'=>array(
                'className'=>'Photo',
                'foreignKey'=>'photo_id'
            )
        );

と写真モデル

    public $belongsTo = array(
    'User'=>array(
        'className'=>'User',
        'foreignKey'=>'user_id'
    )
);

public $hasMany = array(
    'Comment'=>array(
        'className'=>'Comment',
        'foreignKey'=>'photo_id'
    )
);

私が得た写真のデータを読んだとき:

'Photo' => array -> info about photo which is ok for me
'User' => array -> info about user ok for me
'Comment' => array -> all comments but only with id of users. 

写真に関するデータを取得しているときに、コメントに関連するユーザー名を取得するために、ユーザーとコメントを接続するにはどうすればよいですか?

4

1 に答える 1

4

find()を呼び出す前に呼び出す必要があり$this->recursive = 2ます。これにより、クエリによって返されるすべてのオブジェクトのすべての関連付けがフェッチされます。$recursiveまたは、任意のモデル内で変数を設定することもできます。

再帰の種類は次のとおりです。

  • -1 Cakeは写真データのみをフェッチし、結合はフェッチしません。
  • 0Cakeは写真データとそのドメインをフェッチします
  • 1 Cakeは、写真、そのドメイン、および関連するコメントをフェッチします
  • 2 Cakeは、写真、そのドメイン、関連するコメント、およびコメントに関連するユーザーをフェッチします

また、関連付けの各フィールドを指定するまで、返されるすべてのデータを完全に制御できるため、Containableを検討することをお勧めします。

写真モデル:

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

そして、findメソッドは次のようになります。

<?php
$this->Photo->find('all', array(
    'contain' => array(
        'User',
        'Comment' => array(
            'User' = array(
                'fields' => array('username')
            ),
            'conditions' => array(
                'Comment.erased' => 0
            )
        ))
    'conditions' => array(
        'Photo.id' => $id
)));
于 2012-07-11T11:09:56.363 に答える