cakephp habtm relationship(保存数据)

时间:2009-10-19 12:08:11

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

有关HABTM的问题已在stackoverflow上发布了一些不错的数字,但我仍在寻找解决问题的方法。

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

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

我现在缺少哪些步骤。?

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

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

由于

2 个答案:

答案 0 :(得分: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))
);

但是这个原生功能存在问题,每次保存对象时,都需要将每个标记传递给已保存的数组。否则,它们都会在被读取之前被删除。

然而,您可以在面包店找到一个名为extended associations的插件。

使用它,你会这样做:

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

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

删除标签:

$this->Post->habtmDelete('Tag', 1, 1); 

答案 1 :(得分:3)

Stornvig先生的帮助下,我能够解决我的问题。以下是link,它描述了如何在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');

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

  

白水回收($这 - >数据)

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

more info