当我处理当前项目时,我遇到了一个相当复杂的问题。我现在会更详细地指出我的问题:
有三种型号: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'的语义工作吗?
非常感谢您花时间阅读并帮助我!
答案 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时掌握了关系概念。