私は、HABTM (多くに属し、多数に属している) 関係を持つ 2 つのモデルを持っています: Qsets と Questions です。
次のアクション (QsetsController.php 内) により、qsets_questions テーブルに新しい行が作成され、新しい質問が新しい qset に表示されます。ただし、代わりに既存の行を更新するため、その質問が以前の qset から取得され、新しいものに追加されます。
私は何を間違っていますか?
public function admin_add_question( $qset_id, $question_id) {
//find the qset...
$qset = $this->Qset->find('first', array('id'=>$qset_id));
$this->Qset->QsetsQuestion->create();
$data = array(
"Qset"=> array ("id"=>$qset_id),
"Question"=>array ("id"=>$question_id)
);
Controller::loadModel('Question');
$r= $this->Question->save($data);
$this->Session->setFlash('Question id['.$question_id.'] added.');
$this->redirect( $this->referer() );
}
私の説明からは明らかでない場合は、次のことが起こります。
質問を追加する前に...
**Qset 1**
Question 1
Question 2
**Qset 2**
Question 3
Question 4
質問 2 を Qset 2 に追加するとどうなるか
**Qset 1**
Question 1
Question 2
**Qset 2**
Question 3
Question 4
Question 2
逆にどうなるか…
**Qset 1**
Question 1
<----removed
**Qset 2**
Question 3
Question 4
Question 2
更新: これは私の qsets_questions テーブルのダンプです:
CREATE TABLE `qsets_questions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`question_id` int(11) NOT NULL,
`qset_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ;
解決:
@nunsのおかげで、これが作業バージョンです
public function admin_add_question( $qset_id, $question_id) {
$this->Qset->QsetsQuestion->create();
$data = array(
"qset_id"=>$qset_id,
"question_id"=>$question_id
);
Controller::loadModel('Question');
$this->Question->QsetsQuestion->save($data);
$this->Session->setFlash('Question id['.$question_id.'] added.');
$this->redirect( $this->referer() );
}