Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2010, 19:36
Avatar de mayid
mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Guardar datos en tabla HABTM en CAKE

Estoy siguiendo la convencion de nombres de tablas (en CAKE), y queriendo guardar datos de una relacion muchos a mucho (HABTM).

Mi esquema es db es:

users (id, username)
user_words (id, user_id, word_id)
words (id, word)

Segun lo explicado aqui, to debería ir sobre ruedas:
http://book.cakephp.org/es/view/1034...del-Data-HABTM

Pero no me funciona. Grabando desde word/add solo se llena la tabla word. La tabla de relacion no se llena.

Esta es mi vista:

Código PHP:
Ver original
  1. echo $form->create();
  2.  
  3. //echo $form->hidden('id');
  4. echo $form->input('User.id', array('type'=>'hidden', 'value' => $user_data['User']['id']));
  5. echo $form->input('name', array( 'label' => 'Nueva Palabra para '.$user_data['User']['username'], 'maxLength' => 90));
  6.  
  7. echo $form->end('Agregar');

Esta es mi accion words/add:

Código PHP:
Ver original
  1. function add()
  2.         {
  3.            
  4.             if (!empty($this->data))
  5.             {    
  6.                            
  7.                 $this->Word->create();
  8.                
  9.                 if ($this->Word->save($this->data))
  10.                     $this->redirect('/users/display');
  11.             }
  12.            
  13.             $user_id = $this->params['pass'][0];
  14.             $user_data = $this->Word->User->find('first', array('conditions' => array('User.id' => $user_id)));
  15.            
  16.             $this->set('user_data',$user_data);
  17.            
  18.         }

Y mi modelo:

Código PHP:
Ver original
  1. class Word extends AppModel
  2.     {
  3.        
  4.         var $hasAndBelongsToMany = array(
  5.             'User'=> array(
  6.                 'className' => 'User', //sWord
  7.                 'joinTable' => 'users_words',
  8.                 'foreignKey' => 'word_id',
  9.                 'associationForeignKey' => 'user_id'
  10.             ));
  11. }

Anteriormente use una alternativa: crear un modelo users_word, y un controlador, estableciendo las relaciones hasMany belongTo hasMany, pero me pasaba lo mismo. Podia grabar en la tabla (de relacion) y no me grababa en la tabla (words).

En fin, el problema es que no me funciona grabar en dos tablas a la vez. Intenté setear todo en InnoDB pero tampoco cambia nada.