2016-08-09 60 views
0

Ich verwende CakePHP 2.x und möchte die Seitennummerierung in meinem Controller anwenden, aber ich möchte, dass sie in einem Fall mit einem Contain-Schlüssel und im anderen Fall ohne Contain-Schlüssel verfügbar ist . Als Beispiel betrachten Sie dieses Beispiel:Paginieren mit und ohne enthaltenem Schlüssel CakePHP 2

class BlogController extends AppController { 
    public $name = "Blog"; 
    public $paginate = array(
    'Post'=>array(
      'limit'=>30, 
      'conditions'=>array('publish'=>1), 
      ), 
     ); 

    function just_posts() { 
     // I want to paginate Post as it is 
    } 

    function posts_with_comments() { 
     // I want paginate Post with 'contain'=>'comments' 
    } 
} 

In meinem wirklichen Leben Fall der Zweck dies zu tun für die Leistung ist, die Abfragezeit zu reduzieren. Aber ich weiß nicht, wie ich das umsetzen soll. Das $ this-> paginate (...) akzeptiert nur ein Argument zum Filtern von Datensätzen. Gibt es eine Möglichkeit, zwei Paginatoren für dasselbe Modell in einem Controller zur Verfügung zu stellen?

Antwort

1

sollten Sie in der Lage sein Ihr Controller paginate Eigenschaft innerhalb der jeweiligen Aktion zu modifizieren, um die contain zu schließen, bevor Sie Paginieren dabei: -

$this->paginate['Post']['contain'] = 'Comment'; 

Dies würde die Controller-Vorgaben für die spezifische Aktion verlängern.

+1

Dank @drmonkeyninja, das ist sehr nützlich zu wissen. Ich hatte auch das gleiche Problem bei der Festlegung der Grenze für Paginat. Ich bin mir nicht sicher ob ich glücklicher oder peinlicher bin :) – John