有关HABTM的问题已在stackoverflow上发布了一些不错的数字,但我仍在寻找解决问题的方法。
我正在创建一个允许根据特定子类别创建主题的应用程序。 在添加主题时,会要求用户提供标签(在同一表单上)。现在,当用户在单击“添加”按钮时完成向主题添加标签后,主题已成功添加,但标签不是。
我已经为tbl_tags_topics.
(在cakephp的约定中定义)创建了主题和标记的连接表,并在主题和标记模型中正确定义了'hasAndBelongsToMany'数组。
我现在缺少哪些步骤。?
我还有一个与此相关的问题,但是当我能够将与主题相关的标签成功发送到数据库时,我会发布它。 (该功能类似于stackoverflow的标签添加和附加功能)
非常感谢任何帮助。如果您找到HABTM,也请告诉我任何有关HABTM的好教程。
由于
答案 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');
然后在控制器中添加方法只需使用
白水回收($这 - >数据)
并且连接表也将填充所需的记录。