首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保存需要唯一的关联模型数据

保存需要唯一的关联模型数据
EN

Stack Overflow用户
提问于 2012-04-09 17:45:06
回答 1查看 60关注 0票数 0

我已经构建了一个CakePHP应用程序,允许用户创建帖子并向其添加标签(主题)。数据库和关联的结构可以在这里看到:Setting up contains for a join table in CakePHP

我已经成功地通过连接表使用Contain拉出了数据。但现在我正在尝试构建用户输入主题的部分,然后将其保存在topic table和Topic_post表中。

我的add new post方法有以下代码:

代码语言:javascript
复制
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!');
            }
        }

因此,我现在需要做的是保存视图中键入的相关主题数据:

代码语言:javascript
复制
<?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。

有人能帮上忙吗?因为我觉得这很复杂...

EN

回答 1

Stack Overflow用户

发布于 2012-04-09 17:56:17

你可以这样做:

代码语言:javascript
复制
$this->Post->saveAll($this->data, array('validate'=>'first'));

使用array('validate'=>'first');可以确保我们的两个模型在保存之前都经过了验证。你是说这样的事吗。

希望能有所帮助

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10071506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档