Foros del Web » Programando para Internet » PHP »

Cakephp Recursividad selectiva en consulta CAKE

Estas en el tema de Recursividad selectiva en consulta CAKE en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 09/10/2010, 11:02
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
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?
  #2 (permalink)  
Antiguo 09/10/2010, 16:18
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Recursividad selectiva en consulta CAKE

Ya me pusieron sobre la pista en el IRC. Hay que usar containable para filtrar bien las busquedas, y retirar lo innecesario...

http://book.cakephp.org/view/1323/Containable

Aun no se si con esto pueda también llegar a la profundidad que necesito para Friends->Words pero ya veremos.

Etiquetas: cake, recursividad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:44.