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

您需要$this->recursive = 2在调用 find() 之前调用,这将获取查询返回的每个对象的所有关联。或者,您可以$recursive在任何模型中设置变量。

不同类型的递归如下:

  • -1 Cake 仅获取照片数据,不获取连接。
  • 0 Cake 获取照片数据及其域
  • 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 回答