CakePhp habtm отношения (сохранение данных)
-
22-09-2019 - |
Вопрос
Вопрос, связанный с HABTM, был опубликован в некоторых хороших номерах на StackOverflow, но я все еще ищу решение моей проблемы.
Я создаю приложение, которое позволяет создавать темы на основе конкретной подкатегории. При добавлении темы пользователя просят теги (в той же форме). Теперь, когда пользователь закончил добавление тегов в тему на кнопке «Нажмите кнопку добавления», тема успешно добавлена, но теги нет.
Я создал таблицу соединений как для тем, так и для тегов как tbl_tags_topics.
(Как определено в конвенциях CakePhp) и определил массив «hasandbelongstomany» правильно как в моделях тем, так и в тегах.
Какие шаги мне сейчас не хватает.?
У меня есть еще один вопрос, связанный с этим, но я опубликую его, когда смогу отправить теги, связанные с темой, успешно в базе данных. (Функциональность аналогична функциональности тегов StackOverflow, добавляя и прикрепляя)
Любая помощь очень ценится. Также дайте мне знать о любых хороших учебных пособиях по HABTM, если вы найдете ее.
Спасибо
Решение 2
С помощью мистера Стернвиг, Я смог решить свою проблему. Здесь ссылка на сайт Это описывает полную процедуру того, как достичь такой функциональности в CakePhp. Это потрясающий учебник, чтобы узнать больше об отношениях HABTM.
Для версии 1.3 я обнаружил, что эта техника полезна. Вот шаги:
После определения массива отношений HABTM в обеих моделях
Создайте свою форму как эта
echo $form->create('Job');
echo $form->input('title');
echo $form->input('description');
echo $form->input('location');
echo $form->input('Category');//note the caps and single plural
$form->end('Submit');
а затем в методе добавления контроллера просто используйте
Saveall ($ this-> data)
и таблица соединения будет заполнена необходимыми записями.
Другие советы
Когда вы сохраняете одно из полей, вы передаете такие параметры:
$this->Model->save(
'Model' => array('id' => 1, 'name' => 'one random field)
);
Если у вас есть теги, которые являются Habtm, вы можете сделать следующее:
$this->Model->save(
'Model' => array('id' => 1, 'name' => 'one random field'),
'Tag' => array('Tag' => array(1))
);
Однако есть проблема с этой нативной функцией, это каждый раз, когда вы сохраняете свой объект, вам нужно пройти каждый тег в сохраненный массив. В противном случае они все будут удалены ранее, чтобы их прочитать.
Однако вы можете найти в пекарне, плагин под названием Расширенные ассоциации.
Используя его, вы бы сделали:
$this->Model->habtmAdd('Tag', 1, 1);
Где первый «1» - это идентификатор объекта модели. А второй - идентификатор объекта тега.
И удалить тег:
$this->Post->habtmDelete('Tag', 1, 1);