2013-09-24 24 views
1

每个考试都有一个教学大纲,每个教学大纲都有一个考试。所以,我这样做是在考试模式:使用加入多个模型的分页

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

UsersController我这样做:

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

,并在UsersController的方法我想叫PAGINATE:

$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 | 
---+------+ 

和教学大纲表:

---+---------+------+----------+--------------+ 
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

而我的SQL CakePHP的准备是:

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

回答

2

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

$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');