我已经构建了一个 CakePHP 应用程序,它允许用户创建帖子并向它们添加标签(主题)。可以在这里看到数据库和关联的结构:在 CakePHP 中为连接表设置包含
我已经成功地通过连接表使用 Contain 提取数据。但是现在我正在尝试构建用户输入主题的部分,然后将其同时保存在主题表和 Topic_post 表中。
我有以下代码添加新的发布方法:
if ($this->request->is('post'))
{
//$this->Post->create();
if ($this->Post->save($this->request->data))
{
// Save extra data
$this->Post->saveField('user_id', $this->Auth->user('id'));
$this->Post->saveField('datetime', date('Y-m-d H:i:s'));
$this->Post->saveField('modified', date('Y-m-d H:i:s'));
$this->Post->saveField('status', 1);
// Build slug
$post_title = Sanitize::html($this->request->data['Post']['title'], array('remove'=>true, 'quotes' => ENT_NOQUOTES));
$post_title = String::truncate($post_title, 50, array('exact'=>false,'html'=>false,'ending'=>''));
$this->Post->saveField('slug', Inflector::slug($post_title));
// Redirect the user to the newly created post (pass the slug for performance)
$this->redirect(array('controller'=>'posts','action'=>'view','id'=>Tiny::toTiny($this->Post->id),'slug'=>$this->Post->slug));
}
else
{
$this->Session->setFlash('Server broke!');
}
}
所以我现在需要做的是保存在视图中输入的相关主题数据:
<?php echo $this->Form->create(); ?>
<?php echo $this->Form->input('Post.title'); ?>
<?php echo $this->Form->input('Post.content', array('type'=>'textarea','label'=>false)); ?>
<?php echo $this->Form->input('Topic.title', array('type'=>'textarea','label'=>'Topics')); ?>
<button type="submit" class="orangeButton small">Create</button>
<?php echo $this->Form->end(); ?>
我查看了 CakePHP 文档,似乎我需要 saveAll 之类的东西?但是我很困惑,因为我不是 100% 确定如何使用它,重要的是要注意用户可以将多个主题保存到数据库中,并且主题本身都是唯一的,因此例如你不能创建一个已经存在的主题将改为仅使用链接器的现有 ID。
任何人都可以帮忙吗?因为我觉得这相当复杂......