2009-10-19 2 views
3

Вопрос, связанный с HABTM, был опубликован в некоторых хороших номерах в stackoverflow, но я все еще ищу решение моей проблемы.cakephp habtm relationship (save data)

Я создаю приложение, позволяющее создавать темы на основе определенной подкатегории. При добавлении темы пользователь запрашивает теги (в той же форме). Теперь, когда пользователь завершил добавление тегов в тему нажатием кнопки «Добавить», тема успешно добавлена, но тегов нет.

Я создал таблицу соединений для обеих тем и тегов как tbl_tags_topics. (как определено в условностях cakephp) и правильно определил массив hasAndBelongsToMany как в моделях тем, так и в тегах.

Какие шаги мне сейчас не хватает?

У меня есть еще один вопрос, связанный с этим, но я отправлю его, когда я смогу отправить теги, связанные с темой, в базу данных. (функциональность аналогична функциональности добавления и присоединения тегов stackoverflow)

любая помощь с благодарностью., также дайте мне знать о любых хороших учебниках по HABTM, если вы ее найдете.

Благодаря

+0

Используете ли вы компонент безопасности? – powtac

+0

нет, я не использую компонент безопасности прямо сейчас. Он (Auth) будет реализован, когда эта функция (HABTM) будет выполнена. –

ответ

3

С помощью г-Stornvig, я был в состоянии решить мою проблему. Вот link, который описывает полную процедуру того, как достичь такой функциональности в 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)

, а таблица соединений также будет заполнена необходимыми записями.

more info

5

При сохранении одного из полей, вы передаете параметры так:

$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)) 
); 

Однако есть проблема с этой родной функцией, так как каждый раз, когда вы сохраняете свой объект, вам необходимо передать каждый тег в сохраненный массив. В противном случае все они будут удалены до того, как их будут читать.

Однако вы можете найти на пекарне, плагин под названием extended associations.

Используя его, вы могли бы сделать:

$this->Model->habtmAdd('Tag', 1, 1); 

Если первый "1" является идентификатор объекта модели. А второй - идентификатор объекта тега.

И удалить тег:

$this->Post->habtmDelete('Tag', 1, 1); 
+1

Натурально нет, это не так. –

+0

Я добавил «extend_associations.php», и теперь я получаю следующее предупреждение: «Предупреждение (2): неверный аргумент, предоставленный foreach() [CORE \ Cake \ Utility \ ObjectCollection.php, строка 314]». Я использую cakephp 2. – matheusvmbruno

+0

@matheusvmbruno То же самое здесь, вы решили эту проблему? – Torsten