У меня есть сайт для вопросов и ответов. Когда задан вопрос, я хочу, чтобы можно было пометить новый вопрос несколькими темами. Используя multiselect, я отправил массив контроллеров topic_ids в контроллер. Я слежу за документацией Cake, но у меня появилось много ошибок.Связывание многих со многими ассоциациями в CakePHP
Это правильный способ связать связанные объекты со многими отношениями? Я могу предоставить дополнительную информацию или код, если это необходимо.
$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 !. Подсказка: что говорят документы API из метода BelongsToMany :: link() 'о том, что делает этот метод, и какие данные он должен получать? – ndm
Спасибо. Я довольно новичок в тортике. Я знаю, как использовать набор отладки, но я не уверен, как получить трассировку стека в читаемой форме, которую я могу скопировать и вставить сюда. С помощью этого кода я получаю «500 Error RuntimeException» «Предполагается, что и исходный объект, и каждый из целевых объектов уже сохранены» означает ли это, что мне нужно сделать вызов для ссылки после сохранения вопроса? – pjenk213
ЭТО РАБОТАЕТ! Спасибо за тонну за вашу помощь и приведу меня к решению вместо того, чтобы дать мне это. Я очень ценю это. – pjenk213