CakePHP – Pagination bei einer HABTM Beziehung
Das Handbuch ist nicht allzu Gesprächig was dieses Thema angeht. Glücklicherweise gibt es eine funktionierende, aber nicht gut dokumentierte Lösung.
Zu finden ist sie beim Cakebaker. Es gibt einen Key für die Pagination, für den ich keine Doku finden konnte. Falls jemand in der offiziellen Doku etwas finden sollte, freue ich mich über jeden Hinweis und Kommentar.
Der Key lautet joins und erwartet ein Array das die Beziehung definiert.
In meinem Fall ist es so, dass Produkte und User in einer HABTM Beziehung stehen. Die Auflösungstabelle ist products_users und hat die übliche HABTM Struktur. Hier der Code, der für mich in der Index Funktion meines Controllers funktioniert.
function index() { $this->paginate = array( 'Product' => array( 'limit' => 2, 'joins' => array( array( 'table' => 'products_users', 'alias' => 'ProductUser', 'type' => 'inner', 'conditions'=> array('ProductUser.product_id = Product.id') ), array( 'table' => 'users', 'alias' => 'User', 'type' => 'inner', 'conditions'=> array( 'User.id = ProductUser.user_id', 'User.id' => $this->user_id ) ) ) ) ); $this->set('products', $this->paginate('Product') ); }
Das ganze ist natürlich einiges an Code, es gibt auch eine Lösung die das meiste in den app_controller packt, die ich nicht benutze, aber der Vollständigkeit erwähnen wollte. Sollte jemand eine bessere Lösung kennen bitte ich um Erleuchtung
In diesem Zusammenhang:
- CakePHP – Pagination in Verbindung mit Containable Das Behaviour Containable ist eines der Highlights bei der Arbeit...
- PDF bearbeiten mit Zend Framework in einer CakePHP Anwendung Es gibt zur Zeit noch keine PDF Unterstützung in CakePHP....
- CakePHP – Einfluss auf die Paginator URL nehmen In den Views mit Hilfe der Methoden prev(), next() und...