Cakephp retrieving HABTM which Conditions

前提是你 提交于 2019-12-20 14:48:29

问题


I'm using cakephp and would like to display all Submissions which are part of Category 'X' I have 4 tables with a HABTM relationship.

Users -> (haveMany) -> Submissions <-> (hasAndBelongsToMany) <-> Categories

but I would like to do so using the $this->paginate() and for each submission I would like to display the user who posted the submission.

User Table

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

Submission Table

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

Category Table

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

SubmissionCategory Table

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

I am having really trouble creating a paginate which can do this, I'm starting to think its not possible unless I'm missing something.

If I was not using cakephp this is the query I would want to do

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

回答1:


HABTM relationships are very unwieldy in CakePHP I find. You are going to need to set up the joins manually using the $paginate variable. Then you can pass in the optional conditions array to the paginate() function. Example:

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

?>


来源:https://stackoverflow.com/questions/1963296/cakephp-retrieving-habtm-which-conditions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!