Cant' get all User Data from HABTM in cakephp

三世轮回 提交于 2020-01-03 06:21:33

问题


I've spent three days working this issue but has come to a dead end and can't proceed. I know how to get the needed data using non cakephp methods, but I prefer to use cakephp's model relation.

MY MODELS

class User extends AppModel {
   var $hasOne = 'Profile'; 
   }


class Profile extends AppModel {
    var $belongsTo = 'User'; 
    var $hasAndBelongsToMany = array('Quad' => array('className' => 'Quad'));
   }


class Quad extends AppModel{
   var $belongsTo = 'User';
   var $hasAndBelongsToMany = array ('Performer' => array ('className' =>'Performer'));
   }


class Performer extends AppModel {
   var $name = 'Performer';
   var $hasAndBelongsToMany = array('Quad' => array('className' => 'Quad'));
  }

MY HABTM TABLES

(perfomers:id|name|image|created|modified) (quads:id|user_id|etc.....) (performers_quads:id|performer_id|quad_id)

MY Profiles Controller index method

public function index($uid) {
    $user = $this->Profile->User->find('all', array(
                                'contain' => array(
                                'Quad' => array('contain'=>array('Performer'))),
                                'conditions' => array(
                                'User.id' => $uid)));                                 

    $this->set(compact('user'));
  }

My Result Array

UserArray ( 
            [0] => Array ( 
                     [User] => Array ( 
                                [id] => 19 
                                [email] => *****@gmail.com 
                                [password] => *** 
                                [created] => 2013-06-13 23:35:42 
                                [modified] => 2013-06-13 23:35:42 ) 

                     [Profile] => Array ( 
                                   [id] => 21 
                                   [user_id] => 19 
                                   [username] => **** 
                                   [first_name] => ****
                                   [last_name] => **** 
                                   [imageId] => ****.jpg 
                                   [created] => 2013-06-13 23:35:43 
                                   [modified] => 2013-06-17 01:05:22 ) 

                     [Quads] => Array ( 
                                   [0] => Array ( 
                                          [id] => 65 [user_id] => 19 
                                          [title] => Test Event 
                                          [date] => 2013-06-15 16:53:00 
                                          [price] => 25.00 
                                          [venueID] => 1 
                                          [created] => 2013-06-17 01:05:22 ) 

                                   [1] => Array ( 
                                          [id] => 66 
                                          [user_id] => 19 
                                          [title] => Test Event 2 
                                          [date] => 2013-06-12 17:12:00 
                                          [price] => 50.00 
                                          [venueID] => 1 
                                          [created] => 2013-06-17 01:05:22 ) ) ) )

What I need

  UserArray ( 
            [0] => Array ( 
                     [User] => Array ( 
                                [id] => 19 
                                [email] => *****@gmail.com 
                                [password] => *** 
                                [created] => 2013-06-13 23:35:42 
                                [modified] => 2013-06-13 23:35:42 ) 

                     [Profile] => Array ( 
                                   [id] => 21 
                                   [user_id] => 19 
                                   [username] => **** 
                                   [first_name] => ****
                                   [last_name] => **** 
                                   [imageId] => ****.jpg 
                                   [created] => 2013-06-13 23:35:43 
                                   [modified] => 2013-06-17 01:05:22 ) 

                     [Quads] => Array ( 
                                   [0] => Array ( 
                                          [id] => 65 [user_id] => 19 
                                          [title] => Test Event 
                                          [date] => 2013-06-15 16:53:00 
                                          [price] => 25.00 
                                          [venueID] => 1 
                                          [created] => 2013-06-17 01:05:22

                                          [Performer] => Array(
                                                           [0] => Array(
                                                                    [id] => ***
                                                                    [name] => ****
                                                                     etc....))) 

                                   [1] => Array ( 
                                          [id] => 66 
                                          [user_id] => 19 
                                          [title] => Test Event 2 
                                          [date] => 2013-06-12 17:12:00 
                                          [price] => 50.00 
                                          [venueID] => 1 
                                          [created] => 2013-06-17 01:05:22

                                          [Performer] => Array(
                                                           [0] => Array(
                                                                    [id] => ***
                                                                    [name] => ****
                                                                     etc....)))))))

What I'm trying to accomplish is to get the Performers belonging to Quads belonging to User in the the ProfilesController. Any help with this will be greatly appreciated.


回答1:


This is how I finally ended up solving my problem

Models:

class AppModel extends Model {
 var $actsAs = array(
 'Containable');    
}


class Performer extends AppModel {
 var $name = 'Performer';
}


class Quad extends AppModel {
 var $belongsTo = 'User';
 var $hasAndBelongsToMany = array ('Performer');
}


class Profile extends AppModel {
 var $belongsTo = 'User'; 
}


class User extends AppModel {
 var $hasOne = 'Profile';
 var $hasMany = 'Quad';
}

In the Profile Controller:

public function index($uid)
{
    $user = $this->Profile->User->find('all', array(
                     'contain' => array('Quad' =>array('Performer'), 'Profile'),
                     'conditions' => array('User.id' => $uid)));

    $this->set(compact('user'));
}

AND THE RESULT:

  UserArray
 (
    [0] = Array
    (
        [User] = Array
            (
                [id] = 19
                [email] = *****@gmail.com
                [password] *****
                [created] = 2013-06-13 23:35:42
                [modified] = 2013-06-13 23:35:42
            )

        [Profile] = Array
            (
                [id] = 21
                [user_id] = 19
                [username] = ******** 
                [first_name] = *********
                [last_name] = ********** 
                [imageId] = id8fkwd_b81a24524aa20f2c4156277d1b6a7c27_1371445522.jpg
                [created] = 2013-06-13 23:35:43
                [modified] = 2013-06-17 01:05:22
            )

        [Quad] = Array
            (
                [0] = Array
                    (
                        [id] = 65
                        [user_id] = 19
                        [title] = Test Event
                        [date] = 2013-06-15 16:53:00
                        [price] = 25.00
                        [venueID] = 1
                        [Performer] = Array
                            (
                                [0] = Array
                                    (
                                        [id] = 1
                                        [name] = ********
                                        [verified] = 1 
                                        [photo] = 1
                                        [photoname] = *****1370810034.jpg
                                    )

                                [1] = Array
                                    (
                                        [id] = 2
                                        [name] = ******
                                        [verified] = 1 
                                        [photo] = 1 
                                        [photoname] = ******_1370810315.jpg
                                    )

                            )

                        [created] = 2013-06-15 16:53:00
                    )

                [1] = Array
                    (
                        [id] = 66
                        [user_id] = 19
                        [title] = Test Event 2
                        [date] = 2013-06-12 17:12:00
                        [price] = 50.00
                        [venueID] = 1
                        [Performer] = Array
                            (
                                [0] = Array
                                    (
                                        [id] = 1
                                        [name] = *******
                                        [verified] = 1; 
                                        [photo] = 1 
                                        [photoname] = *****_1370810034.jpg
                                    )

                                [1] = Array
                                    (
                                        [id] = 2
                                        [name] = ******
                                        [verified] = 1 
                                        [photo] = 1 
                                        [photoname] = ******_1370810315.jpg
                                    )

                                [2] = Array
                                    (
                                        [id] = 3
                                        [name] = ********
                                        [verified] = 1 
                                        [photo] = 1 
                                        [photoname] = *****_1370812455.jpg
                                    )

                            )

                        [created] = 2013-06-15 16:53:00
                    )

            )

    )

)

Hope this help somebody else going through CakePHP's HABTM tunnel....



来源:https://stackoverflow.com/questions/17250215/cant-get-all-user-data-from-habtm-in-cakephp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!