2

当我尝试将一些条目添加到两个类的连接表中时,我遇到了 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']));
}

还有我的 view.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")

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

4

1 回答 1

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]);
}
于 2012-11-23T17:17:06.463 回答