我在HABTM连接表中更新(更好地更新而不是重新创建)额外字段时遇到问题。我搜索谷歌和其他来源,但现在挣扎了4天。
我有模特:
class Tutorial extends AppModel {
var $hasAndBelongsToMany = array(
'TutorialCategory' => array(
'with' => 'TutorialCategoriesTutorial',
'order' => 'TutorialCategoriesTutorial.order_by ASC',
'unique' => true,
);
}
class TutorialCategory extends AppModel {
var $hasAndBelongsToMany = array(
'Tutorial' => array(
'with' => 'TutorialCategoriesTutorial',
'unique' => true,
);
}
连接表tutorial_categories_tutorial有id,tutorial_id,tutorial_category_id,order_by fields。
我正在尝试更新order_by字段,如:
$order = 1;
foreach($tutorials as $i => $tutorial) {
$this->data[$i]['Tutorial']['id'] = $tutorial['Tutorial']['id];
$this->data[$i]['TutorialCategory']['id'] = $tutorial['TutorialCategory']['id];
$this->data[$i]['TutorialCategoriesTutorial']['order_by'] = $order;
++$order;
}
$this->Tutorial->bindModel(array('hasMany' => array('TutorialCategoriesTutorial')));
$saved = $this->Tutorial->saveAll($this->data);
这是在连接表中删除和装箱新记录,但根本没有设置order_by。我想更新记录并立即设置order_by值。我试过很多但没有运气。
请帮助和/或提供建议和解释。
谢谢!
答案 0 :(得分:3)
当您向HABTM连接模型添加额外数据(订单字段)时,实际上已经超出了与CakePHP的简单HABTM关系的功能。您实际需要设置的是hasMany Through relationship。
在您的情况下,您基本上会创建一个“会员”模型,其中包含Tutorial ID,catergory id和您想要分配给它的数据。然后,您将定义关系属性作为Membership belongsTo Tutorial&类别。这本书可能有一个比我刚才解释的更好的例子!
这样做的主要原因是每个“会员”记录都被视为没有附加HABTM行为的普通记录,因此您可以单独轻松地编辑,删除和添加记录。