我的问题与此答案有关。 https://stackoverflow.com/a/8773953/1297775
我在许多地方读过,@ deceze认为: “老实说,对于任何中途复杂的应用程序,依赖于Cake对HABTM关系的自动处理可能变得非常脆弱且难以调试,所以我总是自己管理HABTM记录。”
甚至CakePHP书都提示它http://book.cakephp.org/2.0/en/models/saving-your-data.html#what-to-do-when-habtm-becomes-complicated
我想问一下,当他说'管理'这个HABTM记录自己时,他是否......
1)根本不在模型中创建HABTM关系并为连接表创建模型
OR
2)在模型中创建HABTM关系,但不要在控制器代码中使用它只需使用$ this-> FirstModel-> JoinModel-> saveAll($ someData);
由于
答案 0 :(得分:2)
基本上,您需要使用hasManyThrough关系,这实际上是手动设置HABTM,允许您向关系添加额外数据(例如创建/过期日期)。这很简单,您只需要创建一个模型来加入它们并使用模型中的普通belongsTo
和hasMany
属性,这里是一个简单的用户/成员/课程设置:
class User extends AppModel {
public $hasMany = array('Membership');
}
class Course extends AppModel {
public $hasMany = array('Membership');
}
class Membership extends AppModel {
public $belongsTo = array('User', 'Course');
}
memberships
表所需的唯一字段(至少)为course_id
和user_id
。
现在,您可以将Membership模型作为普通模型进行操作,而不会将Cake视为HABTM,并在保存记录时使用其自动魔法。您还可以在成员资格模型上使用酷counterCache
来计算课程用户数等。