2011-07-12 16 views
0

私はUsers and Eventsと、このjoinテーブルに設定されたユーザー/イベント間のevents_usersとHABTMの共有テーブルを持っています。HABTMは片方向でしか動作しません

ユーザースキーマ
id, …, …

イベントスキーマ
id,
user_id {this is the Owner of the event}

events_usersスキーマ
id
user_id
event_id


ユーザモデル

public $hasAndBelongsToMany = array(
    'Event' => array(
     'className' => 'Event', 
     'joinTable' => 'events_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'event_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

イベントモデル

var $hasAndBelongsToMany = array(
    … 
    … 

    'SharedUser' => array(
     'className' => 'User', 
     'joinTable' => 'events_users', 
     'foreignKey' => 'event_id', 
     'associationForeignKey' => 'user_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

それはevents_usersデシベルエントリを作成しますScaffoldedのAdd/Editフォームを使ってうまくいきましたが、試してみると、joinテーブルを通して 'アクセス'したものだけでなく、すべてのイベントを取得します。私はイベントを見ると、この結合テーブルを使って関連するユーザーを自動的に表示します。あなたがしたくないUserモデルに添付多くのものがありますならば、

// this throws error of Unknown column 'EventUser.user_id' in 'where clause' (no matter what combination of pluralization or capitalization and underscore, ie EventUser, events_users, Events_Users) 
$events = $this->User->Event->find('all', array('conditions'=> array('EventUser.user_id'=> $id))); 

// this throws error of Undefined property: UsersController::$EventUser 
$events = $this->User->Event->find('all', array('conditions'=> array('UsersEvents.user_id'=> $id))); 

// I would think this just gives the ones they "own", i have a user_id column in Event for the creator of event, but it returns empty 
$events = $this->User->Event->find('all', array('conditions'=> array('user_id'=> $id))); 


// This gives me all events 
$events = $this->User->Event->find('all'); 

答えて

0
$user = $this->User->find('first', array('conditions' => array('User.id' => $id)); 
debug($user['Event']); 

おそらくcontainのみEventモデル:ユーザーがusers_controllerからへのアクセス」を持つイベントをプルする

試み。

+0

arrg、抜け出したい。ありがとうDeceze。私がそれをしたとき、私はFalseになったが、それから私はドキュメントを読んで、何も見つからなかったことを知る。最後にIDの値に注意を払いました... CakeDC Usersプラグインを使用して、私はIDの代わりにSlugをUsers_controllerのビュー機能に渡していたことが判明しました。代わりにfindをスラッグと一致させるように変更し、返されたユーザーのイベントフォームを取得しました。 – mondo

関連する問題