2011-08-02 54 views
0

連接表的hasMany我想用hasMany through關係通過一個模型來連接兩個usersinvitationsCakePHP的如何通過另一種定義兩個相同型號的通過

目前,我有以下控制器:

class User extends AppModel { 
var $name = 'User'; 
var $displayField = 'username'; 

var $hasMany = array(

    'Invitation' => array(
     'className' => 'Invitation', 
     'foreignKey' => 'sender_user_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ), 
    'Invitation' => array(
     'className' => 'Invitation', 
     'foreignKey' => 'receiver_user_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
    ) 
} 

然而,當我得到的錯誤:

Error: Database table sender_users for model SenderUser was not found. 

這是一個有點討厭,因爲我已經日應該指定我想用Invitation

什麼問題,我要更改哪些代碼?

回答

3

第一:您不能兩次創建相同的關聯。即使從PHP語法的角度來看也是不可能的。你必須給每個協會的唯一名稱:

public $hasMany = array(
    'SentInvitation'  => array(...), 
    'ReceivedInvitation' => array(...) 
); 

其次,問題是可能你沒有一個邀請的模型。 Cake根據命名規則即時創建模型。既然你有一列sender_user_id,根據命名約定,你應該也有一個sender_users表。創建邀請模型並將其設置爲沒有該關聯,則Cake不應該查找它。

+0

是的,這有幫助。另外,Invitations模型中的自動生成的MODEL具有''className'=>'SenderUser','而不是''className'=>'User','。現在都好了:) – mgPePe