2011-09-22 51 views
1

當我正在研究當前的項目時,我遇到了一個相當複雜的問題。我現在指出我的問題要詳細得多:CakePHP/Croogo:一個veeery複雜的協會

有三種型號:User,UsersExtendedField和UsersExtended。

UsersExtendedField包含可以手動管理的自定義字段。所有自定義字段也可以顯示在用戶視圖中,當然也可以填寫。然後將值存儲在UsersExtended中,該用戶有兩個foreignKeys:user_id和field_id。

關係如下:用戶有許多用戶擴展字段,用戶擴展字段有許多用戶擴展,用戶擴展屬於用戶,用戶擴展字段。

問題:訪問用戶視圖時,會顯示一個包含用戶信息輸入的表單。任何UsersExtendedFields都可以使用,並且由於這些用戶擴展了很多用戶,他們有很多UsersExtended值。但是我想將它們僅限於屬於目前顯示其視圖的用戶的值。這裏是我的(期望的)關係:

Croogo::hookBehavior('User', 'Crooboard.ExtendedUser', array(
'relationship' => array(
    'hasMany' => array(
     'UsersExtendedField' => array(
      'className' => 'Crooboard.UsersExtendedField', 
      'foreignKey' => '', 
      'conditions' => array('status' => 1) 
      ), 
     ), 
    ), 
)); 

class UsersExtendedField extends AppModel { 
var $name = 'UsersExtendedField'; 
var $displayField = 'fieldname'; 

var $hasMany = array(
    'UsersExtended' => array(
     'className' => 'Crooboard.UsersExtended', 
     'foreignKey' => 'field_id', 
        'conditions' => array(
          'UsersExtended.user_id = User.id' 
        ) 
    ), 
); 

} 

這不是完整的代碼,這些是重要的部分。問題從我寫'UsersExtended.user_id = User.id'的地方開始。顯然,這是行不通的。但我不知道如何在這裏訪問User.id。我也無法想象一個HABTM結構來解決這個任務。你有任何想法如何讓這個'UsersExtended.user_id = User.id'的語義工作?

非常感謝您花時間閱讀並幫助我!

回答

0

聽起來好像您需要正確設置您的HABTM關係。

您已經有連接表UsersExtended,它包含您的外鍵。 刪除以前的所有關係,並在每個User和UserExtendedField模型中設置HABTM。

在您的用戶模型中的關係的代碼應該是這樣的:

var $hasAndBelongsToMany = array(
           'UsersExtended' => array(
            'className' => 'UsersExtended', 
            'joinTable' => 'UsersExtended', //assuming this is the 
                    //name of that model's table 
            'foreignKey' => 'user_id', 
            'associationForeignKey' => 'field_id'        
          ) 
         ); 

欲瞭解更多信息,請查閱page in the cakephp book

此外,this blog post幫我把握的關係概念,當我學習CakePHP的。