2

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 が新しい投稿や新しいコメントを作成するのではなく、2 つの間の新しい関係が欲しいということです。

私はすでにそれを行うことに成功しましたが、私は使用しました

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

問題は、複数のチェックボックスがあることです。そのため、1 つのボックスがチェックされていないかチェックされているかを簡単に確認する方法がよくわかりません。

4

1 に答える 1

0

HABTM を使用した 1 つではなく、2 つの hasMany リレーションを使用して別のモデルを作成すると、より簡単な方法で作業できます。

2 つのモデル間の HasAndBelongsToMany は、実際には、hasMany アソシエーションと属しているアソシエーションの両方を介して関連付けられた 3 つのモデルの省略形です。

これは、データを保存および取得する最も簡単な方法の 1 つです。

詳細については、http: //book.cakephp.org/2.0/en/models/ Saving-your-data.html#what-to-do-when-habtm-becomes-complicitedを参照してください。

新しいモデルでは、次のようなことができます。

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 に答える