1

我正在使用 CakePHP 编写一个非常简单的博客应用程序来帮助我学习框架。博客文章可以有许多标签,标签可以属于许多博客文章(如 StackOverflow 上的)。这是我的带有外键的数据库模式来反映这一点:

在此处输入图像描述

我已经用 CakePHP 在我的模型和模型之间建立了hasAndBelongsToMany关系(我认为这是正确的方法吗?),如下所示:PostTag

class Post extends AppModel {
    public $name = 'Post';

    public $hasAndBelongsToMany = array(
        'Tag' =>
            array(
                'className'              => 'Tag',
                'foreignKey'             => 'post_id',
                'associationForeignKey'  => 'tag_id',
                'unique'                 => true
            )
    );
}

class Tag extends AppModel {
    public $name = 'Tag';

    public $hasAndBelongsToMany = array(
        'Post' => array(
            'className'              => 'Post',
            'foreignKey'             => 'tag_id',
            'associationForeignKey'  => 'post_id',
            'unique'                 => true
        )
    );
}

我还为添加帖子设置了一个非常简单的页面,其视图如下所示:

<h1>Add blog post</h1>

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

我的问题是,是否可以在我的添加页面上有一个输入字段,我可以在其中输入标签名称(用空格分隔),然后让 Cake 自动在我的数据库中建立关系?很像 StackOverflow 的做法。

4

2 回答 2

1

我建议将表名“posts_tags”更改为“post_tags”并添加字段

"joinTable" => "post_tags"; 

在 HABTM 功能中以及如何添加标签?从相同的观点或其他观点?

于 2013-08-12T15:16:37.470 回答
0

检查我们的插件https://github.com/cakedc/tags

它正是这样做的,您只需几行就可以集成它。

于 2013-01-06T19:54:46.213 回答