Tengo algunos problemas con el método y las condiciones de findPHPS de CakePHP en asociaciones de modelos "más profundos". Hay algunos de estos alrededor, pero no pude encontrar una respuesta a esto hasta ahora.Condiciones en los modelos asociados que usan Model-> find() (CakePHP)
Mis asociaciones de modelo son User hasMany Post hasMany Comment hasMany Vote
y Vote belongsTo Comment belongsTo Post belongsTo User
respectivamente. Las asociaciones belongsTo
usan combinaciones internas ('type' => 'INNER').
¿Cómo puedo encontrar todos los votos de los comentarios de un usuario específico con el método de modelo de CakePHP-> find()?
Utilicé deliberadamente una cadena de cuatro modelos, porque esto parece funcionar para las condiciones de los modelos directamente asociados. Por lo tanto, no es necesario utilizar la columna de retención de clave externa en la tabla vecina (condición 'Post.user_id == 1' en lugar de 'User.id == 1').
En SQL sería:
SELECT v.*
FROM votes v
JOIN comments c ON (v.comment_id = c.id)
JOIN posts p ON (c.post_id = p.id)
JOIN users u ON (p.user_id = u.id)
WHERE u.id = 1
Soy incapaz de reproducir estas uniones usando find() + el comportamiento Containable. Aunque podría simplemente obtener un usuario con todos sus datos, tendría que recopilar todos los votos dentro del conjunto resultante.
No está funcionando como esto (Advertencia: Columna desconocida 'User.id'):
$this->Vote->recursive = 2; // or higher
$this->Vote->find('all',array('conditions' => array('User.id' => 1)));
De hecho, esto ni siquiera funciona usando el mensaje en lugar de usuario (VOTO-> comentario-> Publicar) tan pronto como agregue la condición. La consulta SQL fabricada solo une votos y comentarios.
La matriz devuelta solo debe contener los votos que devolverá la consulta SQL anterior, todo lo demás se debe "unir" en el proceso.
Nota: Mi pregunta está muy cerca de éste, lo que me ayudó a empezar: In cakephp how can I do a find with conditions on a related field?
¿Hay alguna razón por la que esté evitando múltiples belongsTo? – cp3
¿Quiere decir que tiene una columna de clave foránea user_id en la tabla de votación y asociar directamente usuario y voto? Eso parece un poco redundante y crea relaciones circulares en mi esquema. "Habiendo dicho eso" funcionaría, supongo. ¿O estoy malinterpretando lo que quieres decir con multiple belongsTo? Si es así, ¿es posible/necesario agregar explícitamente una asociación para Vote belongsTo User y configurarla para "comentar" y votar? – Wolfram
Agregar una clave externa a cada tabla a la que está asociado a través de otra tabla sería demasiado redundante. – BWelfel