Frage

Ich bin mit CakePHP und möchten alle Beiträge angezeigt werden, die in der Kategorie ‚X‘ Ich habe 4 Tabellen mit einer HABTM Beziehung.

Benutzer -> (haveMany) -> Veröffentlichungen <-> (hasAndBelongsToMany) <-> Kategorien

, aber ich möchte, dies zu tun mit dem $ this-> Paginieren () und für jede Einreichung würde Ich mag den Benutzer anzuzeigen, der die Vorlage geschrieben.

Benutzertabelle

Id   |      Name         
-----+-------------------
1    |   User 1      
2    |   User 2     

Submission Tabelle

Id   |      Name         |   User_id
-----+-------------------+--------------
1    |   Submission 1    |      1    
2    |   Submission 2    |      2    

Kategorie Tabelle

Id   |      Name 
-----+-------------------
1    |   Category 1        
2    |   Category 2        

SubmissionCategory Tabelle

Id   |   Submission_id   |   Category_id 
-----+-------------------+-------------------
1    |         1         |        1     
2    |         1         |        2  
3    |         2         |        1      

Ich habe wirklich Mühe einen Paginieren zu schaffen, die dies tun können, ich fange an zu denken, seine nicht möglich, es sei denn, ich etwas fehle.

Wenn ich nicht cakephp diese verwendet, ist die Abfrage würde ich tun möchte,

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
War es hilfreich?

Lösung

HABTM Beziehungen sind sehr unhandlich in CakePHP ich finde. Sie werden nach Bedarf einzurichten die Joins die $ Paginieren Variable manuell verwenden. Dann können Sie in der optionalen Bedingungen Array auf die Paginieren () Funktion übergeben. Beispiel:

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

?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top