mysql - 使用连接多个模型的分页

标签 mysql cakephp pagination cakephp-2.4

每个考试都有一个教学大纲,每个教学大纲都有一个考试。所以,我在考试模型中这样做了:

public $hasOne = 'Syllabuses'; //table: syllabuses, model: Syllabuses

UsersController 我这样做了:

public $uses = array('Setting', 'Exam', 'Syllabuses');

UsersController 的方法中我想调用分页:

$options = array(
    'fields' => array('Exam.id', 'Exam.name', 'Syllabuses.id', 'Syllabuses.name', 'Syllabuses.syllabus', 'Syllabuses.last_updated'),
    'joins' => array(
        'table' => 'syllabuses',
        'conditions' => array('Exam.id = Syllabuses.exam_id')
    )
);
$this->paginate = $options;
$this->set('syllabuses', $this->Paginator->paginate('Syllabuses'));

考试表:

---+------+
id | name |
---+------+

和类(class)表:

---+---------+------+----------+--------------+
id | exam_id | name | syllabus | last_updated |
---+---------+------+----------+--------------+

所以,我得到了一些错误。像这样:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'syllabuses Array LEFT JOIN oes.syllabuses AS Syllabuses ON (Syllabuses.`' at line 1

CakePHP 准备的 SQL 是:

SELECT `Exam`.`id`, `Exam`.`name`, `Syllabuses`.`id`, `Syllabuses`.`name`, `Syllabuses`.`syllabus`, `Syllabuses`.`last_updated` 
FROM `oes`.`exams` AS `Exam` syllabuses Array 
LEFT JOIN `oes`.`syllabuses` AS `Syllabuses` ON (`Syllabuses`.`exam_id` = `Exam`.`id`)
WHERE 1 = 1 LIMIT 20

但我想要的是类似于下面的查询。我在mysql中测试过:

SELECT  `Exam`.`id` AS eid,  `Exam`.`name` AS ename,  `Syllabuses`.`id` AS sid,  `Syllabuses`.`name` AS sname,  `Syllabuses`.`syllabus` ,  `Syllabuses`.`last_updated` 
FROM  `oes`.`syllabuses` AS  `Syllabuses` , exams AS Exam
WHERE Exam.id = Syllabuses.exam_id
ORDER BY Exam.id
LIMIT 20

现在有人请帮我实现这个目标。什么样的变化可以使 CakePHP 准备像那样的查询(我尝过的)来完成我的 Pagination

最佳答案

好的,我认为这对许多程序员都有帮助。这就是为什么我想分享我最后所做的事情:

$options = array(
    'fields' => array(
        'Exam.id',
        'Exam.name',
        'Syllabuses.id',
        'Syllabuses.name',
        'Syllabuses.exam_id',
        'Syllabuses.syllabus',
        'Syllabuses.last_updated'
    ),
    'recursive' => 0,
    'conditions' => array('Exam.id = Syllabuses.exam_id'),
    'limit' => 3
);
$this->paginate = $options;
$syllabuses = $this->Paginator->paginate('Exam');

关于mysql - 使用连接多个模型的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18989895/

相关文章:

mysql - 用一个命令截断 MySQL 数据库中的所有表?

php - 将 3 个表中的数据显示为菜单

jquery - Ajax 结果用作 mysql 查询约束

php - Cakephp3,如何在cakephp3中使用where子句和inner join?

php - 如何在 CakePHP 中将参数从一个 Controller 传递到另一个 Controller ?

mysql - 在同一个 mysql 表上使用内连接从 select 获取数据

php - Jquery,读取从 PHP 接收的 JSON 变量

.net - 使用动态 OrderBy 进行分页/分页的 Linq 表达式

javascript - 为什么服务器端分页不适用于我的 jquery 数据表?

php - 使用 HABTM 模型的 CakePHP 分页