2009-10-19 107 views
3

与HABTM相关的问题已发布在一些很好的数字上,但我仍然在寻找解决我的问题的方法。cakephp habtm关系(保存数据)

我正在创建一个应用程序,允许基于特定子类别创建主题。 在添加主题时,会向用户询问标签(在同一表单上)。现在,当用户完成添加标签到主题上单击添加按钮时,主题已成功添加,但标签不是。

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

我现在想念什么步骤?

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

任何帮助非常感谢。如果您发现任何帮助,请让我知道任何有关HABTM的良好教程。

感谢

+0

您是否在使用安全组件? – powtac 2009-10-19 12:09:45

+0

不,我现在没有使用任何安全组件。当(HABTM)功能完成时,它将执行(Auth)。 – 2009-10-20 06:17:03

回答

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'); 

,然后在控制器add方法简单地使用

saveAll($ this-> data)

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

more info

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)) 
); 

但是,这种本机功能存在问题,就是每次保存对象时,都需要将标记传递给保存d数组。否则,他们都将被删除之前被阅读。

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

使用它,你会怎么做:

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

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

,并删除标签:

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

本地没有它不是。 – 2009-10-20 07:19:52

+0

我添加了“extend_associations.php”,现在我收到以下警告:“警告(2):为foreach()[CORE \ Cake \ Utility \ ObjectCollection.php,第314行]提供的无效参数”。我使用cakephp 2. – matheusvmbruno 2012-10-31 12:47:35

+0

@matheusvmbruno同样在这里,你解决了这个问题吗? – Torsten 2014-06-12 20:19:41