3

与 HABTM 相关的问题已在 stackoverflow 上以一些不错的数量发布,但我仍在寻找解决问题的方法。

我正在创建一个允许基于特定子类别创建主题的应用程序。在添加主题时,会要求用户提供标签(在同一表单上)。现在,当用户通过单击添加按钮完成向主题添加标签时,主题已成功添加,但标签未添加。

我已经为主题和标签创建了连接表tbl_tags_topics.(如 cakephp 的约定中所定义),并在主题和标签的模型中正确定义了“hasAndBelongsToMany”数组。

我现在缺少什么步骤。?

我还有一个与此相关的问题,但是当我能够成功地将与主题相关的标签发送到数据库时,我会发布它。(功能类似于stackoverflow的标签添加和附加功能)

非常感谢任何帮助。如果你找到任何关于 HABTM 的好教程,也请告诉我。

谢谢

4

2 回答 2

5

当您保存其中一个字段时,您会传递如下参数:

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field)
);

如果您有标签,即 HABTM,您可以执行以下操作:

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field'),
    'Tag' => array('Tag' => array(1))
);

但是这个原生特性有一个问题,就是每次保存对象时,都需要将每个标签传递给保存的数组。否则,它们将在被读取之前全部被删除。

但是,您可以在 bakery 上找到一个名为扩展关联的插件。

使用它,你会做:

$this->Model->habtmAdd('Tag', 1, 1);

其中第一个“1”是模型的对象 ID。第二个是标签的对象 ID。

并删除标签:

$this->Post->habtmDelete('Tag', 1, 1); 
于 2009-10-19T14:55:40.420 回答
3

在Stornvig先生的帮助下,我能够解决我的问题。这是描述如何在 cakephp 中实现此类功能的完整过程的链接。这是一个很棒的教程,用于了解更多关于 HABTM 关系的信息。

对于 1.3 版,我发现这种技术很有用。以下是步骤:

在两个模型中定义 HABTM 关系数组之后

像这样创建你的表单

echo $form->create('Job');
echo $form->input('title');
echo $form->input('description');
echo $form->input('location');
echo $form->input('Category');//note the caps and single plural
$form->end('Submit');

然后在控制器添加方法中只需使用

全部保存($this->data)

并且连接表也将填充所需的记录。

更多信息

于 2009-10-23T06:10:42.287 回答