Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/10/2010, 11:02
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
Recursividad selectiva en consulta CAKE

Estoy creando relaciones entre dos tablas: users y words. Por cierto, tengo tablas de relacion llamadas users_words y users_users

Necesito obtener los siguientes datos en una consulta:

- las palabras que tiene una persona
- los amigos que tiene
- las palabras que tienen los amigos

Con HABTM la recursividad funcionaba bastante bien, aunque era un tanto excesiva. En cambio, con la relación hasMany belongsTo hasMany no puedo obtener la recursividad que necesito.

Estoy usando estas relaciones en el modelo Users:

Código PHP:
Ver original
  1. class User extends AppModel
  2.     {
  3.             var $name = 'User';
  4.                    
  5.             var $hasMany = array(
  6.         'Friend' => array(
  7.             'className' => 'Friend',
  8.             'foreignKey' => 'user_id',
  9.             'dependent' => false
  10.         )
  11.             );
  12.  
  13.             var $hasAndBelongsToMany = array(
  14.                 'Word' => array(
  15.                         'fields'=> 'id, name, description'
  16.                 )
  17.             );
  18. ...}

Esta es la consulta:

Código PHP:
Ver original
  1. // get user data
  2. $this->User->recursive = 2;        
  3. $user_relations = $this->User->find('first', array('conditions' => array('User.id' => $id)));

QUe me devuelve:
Código PHP:
Ver original
  1. (
  2.     [User] => Array
  3.         (
  4.             [id] => 1
  5.             [username] => admin
  6.             [password] => e714044c058d932bac9a63f7f00273dbce722794
  7.             [email] => gperez@agendajoven.org.ar
  8.             [photo] => anonimo.gif
  9.         )
  10.  
  11.     [Friend] => Array
  12.         (
  13.             [0] => Array
  14.                 (
  15.                     [id] => 4
  16.                     [user_id] => 1
  17.                     [friend_id] => 2
  18.                 )
  19.  
  20.             [1] => Array
  21.                 (
  22.                     [id] => 6
  23.                     [user_id] => 1
  24.                     [friend_id] => 3
  25.                 )
  26.  
  27.         )
  28.  
  29.     [Word] => Array
  30.         (
  31.             [0] => Array
  32.                 (
  33.                     [id] => 1
  34.                     [name] => comienzo
  35.                     [description] =>
  36.                     [UsersWord] => Array
  37.                         (
  38.                             [id] => 1
  39.                             [user_id] => 1
  40.                             [word_id] => 1
  41.                             [points] => 1
  42.                             [description] =>
  43.                         )
  44.  
  45.                 )
  46.  
  47.         )
  48.  
  49. )

Lo que me está faltando es el listado de palabras de los amigos. Y lo que me está sobrando es un nivel [UsersWord] para las palabras. A esto último no lo estoy pudiendo restringir, ni bajando la recursividad a uno.

Me orientan?