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'.
それはほとんどそれについてです。このクエリを作成するアイデアはありますか? 助けてくれてありがとう!