2009-12-26 12 views
5

J'utilise cakephp et j'aimerais afficher toutes les soumissions qui font partie de la catégorie 'X' J'ai 4 tables avec une relation HABTM.Cakephp récupérant HABTM qui Conditions

Utilisateurs -> (haveMany) -> Mémoires < -> (hasAndBelongsToMany) < -> Catégories

mais je voudrais le faire en utilisant le $ this-> paginate() et pour chaque soumission que je voudrais pour afficher l'utilisateur qui a posté la soumission.

utilisateur Tableau

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

Présentation Tableau

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

Catégorie Tableau

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

SubmissionCategory Tableau

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

J'ai vraiment créer du mal à un paginate qui peut le faire, je commence à penser son pas possible à moins que je me manque quelque chose.

Si je n'utilisait CakePHP c'est la question que je voudrais faire

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 

Répondre

7

relations HABTM sont très difficiles à manier dans CakePHP je trouve. Vous devrez configurer manuellement les jointures à l'aide de la variable $ paginate. Ensuite, vous pouvez passer dans le tableau des conditions optionnelles à la fonction paginate(). Exemple:

<?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))); 
} 
} 

?>