【问题标题】:Complex HABTM query that I can't do我无法完成的复杂 HABTM 查询
【发布时间】:2013-05-30 10:04:21
【问题描述】:

使用 CakePhp 2.3

大家好,我正在尝试在我的系统上进行复杂的查询,但我不知道如何完成它。所以事情就是这样:
这是一个事件系统,成员可以创建事件并注册到它们。为此,我有 3 个表:用户、事件和 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' => '32' 和 'user_id' => ' 29'。

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

【问题讨论】:

    标签: cakephp


    【解决方案1】:

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

     <?php
        class User extends AppModel{
    
        public $hasAndBelongsToMany = array('Event');
    
        }
    

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

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

    【讨论】:

    • 感谢您的回答,但是通过此查询,我得到了存在用户 ID 的所有元素。我想要的是获取有这个用户和其他用户的所有事件。事实上,查询会这样说:在 events_users 中获取 user_id = 1 的所有事件,并在他注册的所有事件中获取向他注册的其他用户。我想它必须在 events_users 中查询,我想不是吗?我迷路了^^
    • 感谢您的帮助,但我刚刚放弃了它对于我需要的东西来说太复杂了,所以我保持简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多