问题
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