【问题标题】:Cakephp retrieving HABTM which ConditionsCakephp 检索 HABTM 的条件
【发布时间】:2009-12-26 12:42:28
【问题描述】:

我正在使用 cakephp,并希望显示属于“X”类别的所有提交 我有 4 个具有 HABTM 关系的表。

用户 -> (haveMany) -> 提交 (hasAndBelongsToMany) 类别

但我想使用 $this->paginate() 来执行此操作,并且对于每个提交,我想显示发布该提交的用户。

用户表

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

提交表

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

分类表

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

提交类别表

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

我真的很难创建一个可以做到这一点的分页,我开始认为这是不可能的,除非我错过了什么。

如果我没有使用 cakephp,这就是我想做的查询

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

【问题讨论】:

    标签: cakephp has-and-belongs-to-many relationship pagination


    【解决方案1】:

    我发现在 CakePHP 中的 HABTM 关系非常笨拙。您将需要使用 $paginate 变量手动设置连接。然后您可以将可选条件数组传递给 paginate() 函数。示例:

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

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多