【问题标题】:cakephp habtm relationship (saving data)cakephp habtm 关系(保存数据)
【发布时间】:2010-12-07 23:33:50
【问题描述】:

与 HABTM 相关的问题已在 stackoverflow 上大量发布,但我仍在寻找解决问题的方法。

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

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

我现在缺少哪些步骤。?

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

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

谢谢

【问题讨论】:

  • 您在使用安全组件吗?
  • 不,我现在没有使用任何安全组件。完成此(HABTM)功能后,将实施它(Auth)。

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


【解决方案1】:

当您保存其中一个字段时,您会传递这样的参数:

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

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

但是你可以在 bakery 上找到一个名为 extended associations 的插件。

使用它,你会做:

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

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

并删除标签:

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

【讨论】:

  • 我添加了“extend_associations.php”,现在我收到以下警告:“警告 (2): foreach() [CORE\Cake\Utility\ObjectCollection.php,第 314 行]”。我正在使用 cakephp 2.
  • @matheusvmbruno 也一样,你解决了这个问题吗?
  • @matheusvmbruno 好的,我刚刚解决了这个问题。我想这与新的 cakephp 约定有关。 1. 模型中 $actsAs 属性中对行为类的引用必须包装在一个数组中(这就是为什么 foreach 循环有一个无效参数,因为它需要一个数组)。 2. 会有其他警告,建议将extend_associations.php文件名改为你传入$actsAs属性的值(例如ExtendAssociations.php)。
【解决方案2】:

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

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

全部保存($this->data)

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

more info

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2013-09-24
    • 2012-08-08
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多