我无法做的复杂HABTM查询

时间:2013-05-30 10:04:21

标签: cakephp

使用CakePhp 2.3

大家好,我正在尝试对我的系统进行复杂的查询,但我无法想象如何完成它。事情就是这样:
它是一个事件系统,成员可以创建事件并注册它们。为此,我有3个表:users,events和events_users。用户HABTM事件,事件HABTM用户。
我也有3个型号:
user.php的

<?php
class User extends AppModel{

    public $hasAndBelongsToMany = array('Event');
    public $hasMany = array('EventUser');
}

Event.php

<?php
class Event extends AppModel{

    public $hasAndBelongsToMany = array('User');
    public $hasMany = array('EventUser');

}

EventUser.php

<?php
class EventUser extends AppModel {

    public $useTable = 'events_users';
    public $belongsTo = array('Event', 'User');

}

在我的UsersController中,我有一个名为“show($ id)”的动作,其目的是显示用户创建和注册的事件。这是控制器:
UsersController.php

<?php
class UsersController extends AppController{
function show($id){

        // User info
        $user = $this->User->find('first', array(
            'recursive' => 0,
            'conditions' => array('User.id' => $id)
            ));

        // Registered events
        $registered = $this->User->EventUser->find('all', array(
            'conditions' => array('User.id' => $id)
            ));

        // Created Events
        $created = $this->User->Event->find('all', array(
            'conditions' => array('Event.userid' => $id)
            ));
        $this->set(compact('user', 'registered', 'created'));

    }
}

检查我称之为“已注册事件”的第二个查询。我想在这里做的是获得该用户订阅的所有事件以及订阅了与他相同的事件的所有其他用户。这将是一个数组:

    <?php
    (int) 0 => array(
            'Event' => array(
                'id' => '2',
                'name' => 'event 1',
            ),
            'EventUser' => array(
                (int) 0 => array(
                    'id' => '2',
                    'user_id' => '32',
                    'event_id' => '2'
                ),
                (int) 1 => array(
                    'id' => '4',
                    'user_id' => '29',
                    'event_id' => '2'
                ),
                (int) 2 => array(
                    'id' => '6',
                    'user_id' => '38',
                    'event_id' => '2'
                )
            ),
            'User' => array(
                    'id' => '38',
                    'username' => 'username 1',
                )
            )
        ),
...
?>

在上面的示例中,您可以看到用户ID = 38已注册到事件ID = 2,但还有其他人注册了他:'user_id'=&gt; '32'和'user_id'=&gt; '29'。

这几乎就是它。有人有想法构建这个查询吗? 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您只需要一个型号用户
代码应该是

 <?php
    class User extends AppModel{

    public $hasAndBelongsToMany = array('Event');

    }

现在在你的行动中写下来

$data = $this->User->read(null, $id);