Cakephp检索HABTM的条件是什么
我正在使用cakephp,希望显示属于类别“X”的所有提交内容 我有4个具有HABTM关系的表 用户->(haveMany)->提交(hasandbelongtomany)类别 但是我想使用$this->paginate()来完成这项工作,对于每次提交,我想显示发布提交的用户 用户表Cakephp检索HABTM的条件是什么,cakephp,has-and-belongs-to-many,relationship,pagination,Cakephp,Has And Belongs To Many,Relationship,Pagination,我正在使用cakephp,希望显示属于类别“X”的所有提交内容 我有4个具有HABTM关系的表 用户->(haveMany)->提交(hasandbelongtomany)类别 但是我想使用$this->paginate()来完成这项工作,对于每次提交,我想显示发布提交的用户 用户表 Id | Name -----+------------------- 1 | User 1 2 | User 2 Id |
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
提交表
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
类别表
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
提交类别表
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中,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)));
}
}
?>