CakePHP更新HABTM连接表上的额外字段

时间:2011-07-13 10:39:12

标签: cakephp has-and-belongs-to-many

我在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值。我试过很多但没有运气。

请帮助和/或提供建议和解释。

谢谢!

1 个答案:

答案 0 :(得分:3)

当您向HABTM连接模型添加额外数据(订单字段)时,实际上已经超出了与CakePHP的简单HABTM关系的功能。您实际需要设置的是hasMany Through relationship

在您的情况下,您基本上会创建一个“会员”模型,其中包含Tutorial ID,catergory id和您想要分配给它的数据。然后,您将定义关系属性作为Membership belongsTo Tutorial&类别。这本书可能有一个比我刚才解释的更好的例子!

这样做的主要原因是每个“会员”记录都被视为没有附加HABTM行为的普通记录,因此您可以单独轻松地编辑,删除和添加记录。