Cakephp, получающий HABTM, который Условия

Я использую 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
5
задан Mark 26 December 2009 в 12:52
поделиться

1 ответ

Отношения 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)));
 }
}

?>
7
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: