2009-12-26 4 views
5

Я использую cakephp и хотел бы показать все материалы, которые являются частью категории «X». У меня есть 4 таблицы с отношением HABTM.Cakephp извлечения 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 

ответ

7

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))); 
} 
} 

?> 

 Смежные вопросы

  • Нет связанных вопросов^_^