0

使用 CakePhp 2.3

大家好,我试图在我的系统上进行复杂的查询,但我不知道如何完成它。所以事情是这样的:
这是一个事件系统,成员可以创建事件并注册到它们。为此,我有 3 个表:用户、事件和 events_users。用户HABTM 事件,事件HABTM 用户。
我也有 3 个模型:
User.php

<?php
class User extends AppModel{

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

事件.php

<?php
class Event extends AppModel{

    public $hasAndBelongsToMany = array('User');
    public $hasMany = array('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' => '32' 和 'user_id' => '29'。

差不多就是这样。有没有人有建立这个查询的想法?非常感谢您的帮助!

4

1 回答 1

0

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

 <?php
    class User extends AppModel{

    public $hasAndBelongsToMany = array('Event');

    }

现在在您的行动中,只需写下以下内容

$data = $this->User->read(null, $id);
于 2013-05-30T10:29:06.687 回答