Я использую cakephp и хотел бы отобразить все Представления, которые являются частью Категории 'X', у меня есть 4 таблицы с отношениями HABTM.
Пользователи-> (haveMany)-> Представления <-> (hasAndBelongsToMany) <-> Категории
но я хотел бы сделать настолько использующий $this->, нумеруют страницы (), и для каждого представления я хотел бы отобразить пользователя, который отправил представление.
Пользовательская таблица
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
Таблица SubmissionCategory
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
Отношения HABTM очень громоздки в CakePHP, как мне кажется. Вам придется настраивать соединения вручную с помощью переменной $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)));
}
}
?>