2013-09-24 3 views
1

Каждый экзамен имеет одну учебную программу, в каждом учебном плане есть один экзамен. Таким образом, я сделал это в модели экзамен:Разбиение страницы с использованием нескольких моделей

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

и учебные программы стол:

---+---------+------+----------+--------------+ 
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'); 
Смежные вопросы