Вопрос

Вопрос, связанный с 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); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top