質問と回答を得るためのウェブサイトがあります。質問をするときは、新しい質問に複数のトピックでタグを付けることができます。複数選択を使用して、コントローラにtopic_idsの配列を送り返しました。私はCakeのドキュメントに従ってきましたが、私は多くのエラーを受けています。CakePHPの多対多の関連団体へのリンク
関連するエンティティを多対多の関係にリンクする適切な方法ですか?必要な場合は、より多くの情報やコードを提供することができます。 CakePHPのAPIのドキュメントから
$question = $this->Questions->newEntity();
if ($this->request->is('post')) {
$topics = array_map(
function($id) {
$topic = $this->Questions->Topics->get($id);
$topic->_joinData = $this->Questions->TopicsQuestions->newEntity();
// user_id is metadata in the topics_questions table
$topic->_joinData->user_id = $this->Auth->User()->id;
return $topic;
},
// this is passed back as an array of topic_id
$this->request->data['topics'];
);
$this->Questions->Topics->link($question, $topics);
$question = $this->Questions->patchEntity($question, $this->request->data, ['associated' => ['Topics']]);
if ($this->Questions->save($question)) {
return $this->redirect(['action' => 'view', $question->id]);
} else {
$this->Flash->error(__('The question could not be saved. Please, try again.'));
}
}
スタックオーバーフローへようこそ。エラーを受け取ったときは、CakePHPに精通している人には明らかな問題であっても、完全なスタックトレース(ログから適切に読める形式でコピーするのが理想的です)を含めて、質問に追加してください。ヒント: 'BelongsToMany :: link()'メソッドのAPIドキュメントは、メソッドが何をしているのか、どのような種類のデータが供給されることを期待しているのですか? – ndm
ありがとうございます。私はケーキにはかなり新しいです。私はデバッグキットの使い方を知っていますが、ここでコピーして貼り付けることができる読み取り可能な形式でスタックトレースを取得する方法がわかりません。このコードでは、 "500 Error RuntimeException"が発生します "ソースエンティティとターゲットエンティティの両方がすでに保持されているとみなされます"これは質問を保存した後にリンクを呼び出す必要があるということですか? – pjenk213
これはうまくいった!あなたの助けを借りてくれてありがとう、私にそれを与える代わりに私を解決に導く。ほんとうにありがとう。 – pjenk213