2013-09-24 7 views
1

각 시험에는 하나의 시험 계획표가 있으며, 각 시험 계획서에는 하나의 시험이 있습니다. 이런 짓을 내가 UsersController에서여러 모델을 결합하여 페이지 매김

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

: 그래서,이 시험 모델에서 이런 짓을

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

시험 :

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

그리고 UsersController의 방법

나는 PAGINATE 전화 싶어 표 :

---+------+ 
id | name | 
---+------+ 
,210

및 교수 요목 테이블 :

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

그래서, 약간의 오류가 발생했습니다. 이처럼 :

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 

하지만 내가 원하는 쿼리 우는 소리 같은 것입니다 : CakePHP의 준비

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입니다. 나는 그것을 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');