I have 3 users tables on my DB:

  • Users
  • users_twitter
  • users_web

Users is the parent of both users_twitter and users_web.

And then another table for comments. Both kind of users can comment.

So, when I want to show the comments I need to get information of the author of each comment. In order to do this I am using the variable $belongsTo on the /Model/Comment.php like this:

public $belongsTo = array(
    'users' => array(
        'foreignKey' => 'idUser'
    )
);

In Controller/CommentController, when i do this:

public function index($idPost) {
    $this->Comment->recursive = 0;
    return $this->Comment->find('all');
}

I get this kind of array:

[0] => Array
        (
            [Comment] => Array
                (
                    [id] => 1
                    [idPost] => 441
                    [idUser] => 387371023
                    [comment] => hello word
                    [created] => 2012-03-01 00:00:00
                )

            [User] => Array
                (
                    [id] => 1
                    [username] => myname
                )
        )

And what I want is to get more info yet, the one of the subtype of Users, depending on the existence of the ID on the subtype tables.

In case it was an id of a user_web table, I would like to get this:

[0] => Array
        (
            [Comment] => Array
                (
                    [id] => 1
                    [idPost] => 441
                    [idUser] => 387371023
                    [comment] => hello word
                    [created] => 2012-03-01 00:00:00
                )

            [User] => Array
                (
                    [id] => 1
                    [username] => myname
                    [users_web] =>  Array
                        (
                            [id] => 1
                            [username] => myName
                            [password] => XXXXX
                            [verified] => 1
                            [created] => 1
                        )
        )

Do you know if that's possible with CakePHP? As far as I know, with $hasOne I only get one level more, I need two.

有帮助吗?

解决方案

In your AppModel add

public $actsAs = array('Containable');

In your index:

public function index($idPost) {
    return $this->Comment->find('all', array(
        'contain' => array('User.UsersWeb')));
}

Your User model has to be associated with a UsersWeb model to make this work.

See http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html#containing-deeper-associations for a complete description.

Also why do you return the data in the controller index? Are you using requestAction for this? And why don't you use pagination? Do you really want to display hundreds of comments on one page?

See http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top