如何直接添加到Join Table cakephp?

时间:2012-11-23 17:13:29

标签: php cakephp jointable

当我尝试将一些条目添加到两个类的连接表中时,我遇到了CakePHP的问题。

这是我的联接表:

posts_comments

id
post_id
comment_id

我的帖子模型:

<?php

  class Post extends AppModel {
    var $hasManyAndBelongsTo = array('Comment')
  }

?>

我的评论模型:

<?php

  class Commentextends AppModel {

    var $hasAndBelongsToMany = array('Post');

  }

?>

我的控制器:

ForumController:

function save() {
    if ($this->data) {
        $this->loadModel('PostComment');
        $this->layout = null;
        debug($this->data);
        $this->PostComment->save($this->data);
    }
    $this->redirect(array('action' => 'view', $this->data['PostComment']['PostId']));
}

我的观点.ctp:

<?php 
echo $this->Form->create('PostComment', array('url' => 'save', 'id' => 'save')); ?>
echo $this->Form->hidden('PostComment.PostId', array('value' => $id));
echo $this->Form->input('PostComment.CommentId', array('label' => '', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $CommentName, 'selected' => $CommentId));
echo $this->Form->submit('save', array('id' => 'submit'));
echo $this->Form->end();
?>

当我点击submit时,没有提交任何内容,并且重定向发生了,但我的$this->data中包含的数据未保存在我的BDD中。

但我想要的是,当我提交表单时,我不希望CakePHP创建新帖子或新评论,我只想在两者之间建立新关系。

我已经成功完成了,但我用了

$this->myObject->query("INSERT INTO blablabla")

问题是我有多个复选框,所以我真的不知道如何轻松检查是否取消选中或检查了一个复选框。

1 个答案:

答案 0 :(得分:0)

如果您创建另一个具有两个hasMany关系的模型而不是一个具有HABTM的模型,则可以更简单的方式工作。

  

两个模型之间的HasAndBelongsToMany实际上是简写   通过hasMany和belongsTo关联的三个模型   关联。

我发现这是保存和检索数据的最简单方法之一。

有关详细信息:http://book.cakephp.org/2.0/en/models/saving-your-data.html#what-to-do-when-habtm-becomes-complicated

在新模型中,您可以执行以下操作:

public addRecord($userId, $postId)
    $this->data[$this->alias]['user_id'] = $userId;
    $this->data[$this->alias]['post_id'] = $postId;

    return $this->save($this->data[$this->alias]);
}