CakePHP Abrufen HABTM welchen Bedingungen
-
21-09-2019 - |
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
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)));
}
}
?>