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

时间:2011-09-22 11:05:32

标签: php cakephp plugins model-associations

当我处理当前项目时,我遇到了一个相当复杂的问题。我现在会更详细地指出我的问题:

有三种型号:User,UsersExtendedField和UsersExtended。

UsersExtendedField包含可以手动管理的自定义字段。所有自定义字段也可以显示在“用户”视图中,并且当然可以填写。然后将值存储在UsersExtended中,它有两个foreignKeys:user_id和field_id。

关系看起来像这样:User hasMany UsersExtendedField,UsersExtendedField hasMany UsersExtended,UsersExtended belongsTo User,UsersExtendedField。

问题:访问“用户”视图时,会显示包含用户信息输入的表单。任何UsersExtendedField都可用,并且由于这些具有多个UsersExtended,因此它们具有大量的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'的语义工作吗?

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

1 个答案:

答案 0 :(得分: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时掌握了关系概念。