0

我的问题与这个答案有关。 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关系并为连接表创建模型

或者

2)在模型中创建HABTM关系,但在控制器代码中不使用它,只使用$this->FirstModel->JoinModel->saveAll($someData);

谢谢

4

1 回答 1

2

基本上你需要使用hasManyThrough关系,它本质上是一个手动设置的 HABTM,它允许你向关系中添加额外的数据(例如创建/到期日期)。这很简单,您只需要创建一个模型来加入它们并使用模型中的法线belongsTohasMany属性,这是一个简单的用户/会员/课程设置:

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_iduser_id

您现在可以像普通模型一样操作 Membership 模型,而无需 Cake 将其视为 HABTM 并在您保存记录时使用它的自动魔法。您还可以counterCache在会员模型上使用 cool 来计算课程有多少用户等。

于 2012-06-21T12:46:36.080 回答