绕过cakePHP的最佳方法&x27;什么是HABTM汽车魔术?

绕过cakePHP的最佳方法&x27;什么是HABTM汽车魔术?,cakephp,has-and-belongs-to-many,cakephp-2.1,Cakephp,Has And Belongs To Many,Cakephp 2.1,我的问题与这个答案有关。 我在很多地方读过@deceze所说的: “老实说,对于任何半复杂的应用程序,依靠Cake对HABTM关系的自动处理可能会变得非常脆弱和难以调试,因此我总是自己管理HABTM记录。” 甚至连CakePHP的书都暗示了这一点 我想问,当他说他自己“管理”这个HABTM记录时,他是否 1) 根本不在模型中创建HABTM关系,而是为联接表创建模型 或 2) 在模型中创建HABTM关系,但不在控制器代码中使用它,只需使用$this->FirstModel->JoinModel-

我的问题与这个答案有关。

我在很多地方读过@deceze所说的: “老实说,对于任何半复杂的应用程序,依靠Cake对HABTM关系的自动处理可能会变得非常脆弱和难以调试,因此我总是自己管理HABTM记录。”

甚至连CakePHP的书都暗示了这一点

我想问,当他说他自己“管理”这个HABTM记录时,他是否

1) 根本不在模型中创建HABTM关系,而是为联接表创建模型

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

感谢

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

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');
}
会员资格
表需要的唯一字段(至少)是
课程id
用户id

现在,您可以将成员资格模型作为普通模型进行操作,而无需将其视为HABTM并在保存记录时使用其自动魔法。您还可以在成员资格模型上使用cool
counterCache
s来计算课程的用户数等