使用 HABTM 关系保存帖子标签

Posted

技术标签:

【中文标题】使用 HABTM 关系保存帖子标签【英文标题】:Saving post tags using a HABTM relationship 【发布时间】:2013-01-07 00:26:09 【问题描述】:

我有一个Post 模型和Tag 模型,它们都通过HABTM 关系正确设置。我的数据库中还有一个名为 posts_tags 的表,根据命名约定正确命名。

但是,我终其一生都无法弄清楚如何将标签与帖子一起保存。在我的“添加帖子”页面上,我有这个:

<?php echo $this->Form->create('Post'); ?>
<?php echo $this->Form->input('Post.title'); ?>
<?php echo $this->Form->input('Post.body'); ?>
<?php echo $this->Form->input('Tag.name'); ?>
<?php echo $this->Form->input('Post.slug'); ?>
<?php echo $this->Form->end('Publish'); ?>

在提交时调用此操作:

public function add() 
    if($this->request->is('post'))             
        if($this->Post->saveAll($this->request->data)) 
            $this->Session->setFlash('Post published!');
            $this->redirect('/');
         else 
            $this->Session->setFlash('Post unable to be saved!');
        
    

    $this->set('pageTitle', 'Compose new blog post');

帖子保存但不保存标签或帖子与标签之间的关系,Cake没有给我错误或警告。我需要做什么才能让 Cake 将标签与帖子一起保存并建立所需的关系?

编辑:这是$this-&gt;request-&gt;data 中的内容的转储,使用saveAll() 将其保存到数据库中:

array(
    'Post' => array(
        'title' => 'Blog post',
        'body' => 'Testing this post',
        'slug' => 'Blog-post'
    ),
    'Tag' => array(
        'name' => 'test-tag'
    )
)

【问题讨论】:

标签是否保存在您的tags 表中? 不,posts_tags中的标签和关系都不是。 我已编辑问题,为您提供$this-&gt;request-&gt;data 的输出。 【参考方案1】:

如果您的 Tag 与 Post 的关系是 hasMany,请尝试更改:

<?php echo $this->Form->input('Tag.name'); ?>

<?php echo $this->Form->input('Tag.0.name'); ?>

【讨论】:

不是hasMany,是hasAndBelongsToMany。但我会尝试的:) 不 - 仍然没有变化。帖子被插入但标签没有:(

以上是关于使用 HABTM 关系保存帖子标签的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP - HABTM - 将多个标签添加到多个点

cakephp 在不使用视图的情况下保存 HABTM 关系的数据

Rails,Ransack:如何在 HABTM 关系中搜索“所有”匹配项而不是“任何”匹配项

CakePHP HABTM 关系保存新的关联

Cakephp habtm 关系更新而不是保存

如何在 Flask 视图中使用多对多字段?