0

CakePhp 2.3の使用

みなさん、こんにちは。自分のシステムで複雑なクエリを作成しようとしていますが、それを実行する方法がわかりません。これは
イベントシステムで、メンバーはイベントを作成して登録できます。このために、users、events、events_users の 3 つのテーブルがあります。ユーザー 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');

}

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'));

    }
}

「登録済みイベント」と呼んだ 2 番目のクエリを確認してください。ここでやりたいことは、このユーザーが購読しているすべてのイベントと、彼以外の同じイベントに購読している他のすべてのユーザーを取得することです。次のような配列になります。

    <?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