CakePHP/Croogo:一个veeery复杂的协会

问题描述:

当我正在研究当前的项目时,我遇到了一个相当复杂的问题。我现在指出我的问题要详细得多: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'的语义工作?

非常感谢您花时间阅读并帮助我!

听起来好像您需要正确设置您的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的。