2009-12-26 14 views
5

Estoy usando cakephp y me gustaría mostrar todas las presentaciones que son parte de la categoría 'X' Tengo 4 tablas con una relación HABTM.Cakephp recuperando HABTM que Condiciones

Usuarios -> (haveMany) -> Las presentaciones < -> (hasAndBelongsToMany) < -> Categorías

pero me gustaría hacerlo a través de la función $ this-> paginas() y para cada presentación me gustaría para mostrar al usuario que publicó el envío.

tabla de usuarios

Id |  Name   
-----+------------------- 
1 | User 1  
2 | User 2  

Tabla Presentación

Id |  Name   | User_id 
-----+-------------------+-------------- 
1 | Submission 1 |  1  
2 | Submission 2 |  2  

Tabla de Categoría

Id |  Name 
-----+------------------- 
1 | Category 1   
2 | Category 2   

SubmissionCategory Tabla

Id | Submission_id | Category_id 
-----+-------------------+------------------- 
1 |   1   |  1  
2 |   1   |  2 
3 |   2   |  1  

Estoy teniendo problemas para crear realmente un paginate que puede hacer esto, estoy empezando a pensar que no es posible a menos que me falta algo.

Si yo no utilizaba cakephp esta es la pregunta que me gustaría hacer

SELECT 
    * 
FROM 
    submissions_categories, 
    submissions, 
    users 
WHERE 
    submissions_categories.category_id = 8 
      AND 
    submissions_categories.submission_id = submissions.id 
      AND 
    submissions.user_id = users.id 

Respuesta

7

relaciones HABTM son muy difíciles de manejar en CakePHP encuentro. Necesitará configurar las combinaciones manualmente usando la variable $ paginate. Luego puede pasar la matriz de condiciones opcionales a la función paginate(). Ejemplo:

<?php 
class SubmissionsController extends AppController { 

var $name = 'Submissions'; 
var $helpers = array('Html', 'Form'); 
var $paginate = array('joins' => array(
    array( 
       'table' => 'submissions_categories', 
       'alias' => 'SubmissionsCategory', 
       'type' => 'inner', 
       'conditions'=> array('SubmissionsCategory.submission_id = Submission.id') 
      ), 
      array( 
       'table' => 'categories', 
       'alias' => 'Category', 
       'type' => 'inner', 
       'conditions'=> array( 
        'Category.id = SubmissionsCategory.category_id' 
       ) 
      ))); 

function index() { 
    $this->Submission->recursion = 1; 
    $this->set('submissions', $this->paginate(array('Category.id'=>1))); 
} 
} 

?> 
Cuestiones relacionadas