2012-04-18 2 views
0

이것이 내가하려는 일입니다. 테이블에 (코스) ID가 같은 항목이 여러 개 있습니다.Cakephp Paginate Distinct record

페이지 매김에서 데이터를 가져올 때 모든 레코드가 표시됩니다. 따라서 ID 5 인 레코드가 3 개이면 레코드 번호 5가 세 번 표시됩니다.

내가 원하는 것은 한 번만 기록을 표시해야한다는 것입니다.

온라인에서 검색했지만 아무것도 찾을 수 없습니다.

누군가가 이러한 문제를 발견하고 해결책을 찾은 경우 알려 주시기 바랍니다.

감사합니다,

답변

1

은 CakePHP의 요리 책을 보면, 페이지 매김에 대한 문서는 당신이 $의 PAGINATE 멤버를 대체 할 수 있음을 보여준다. 뒤에서는 모델의 find ('all') 매개 변수를 전달하는 것과 비슷합니다. 아마도 별도의 키워드에 관심이있는 필터를 명시 적으로 반환하도록 매개 변수를 설정하여 필요한 값을 좁히십시오. 그래서 여기

class RecipesController extends AppController { 

    var $paginate = array(
     'fields' => array('Model.field1', 'DISTINCT Model.field2') 
    ); 

} 
0

내 PAGINATE 변수가 같은 모습입니다 :

var $paginate = array(
      'Courses' => array(
       'limit' => 20, 
       'page' => 1, 
       'order' => array(
       'Courses.id' => 'asc') 
), 
); 

조건 변수는 다음과 같이 보입니다 :

 $cond = array("Courses.id LIKE "=>$this->data['id_search'], 
     "Courses.length LIKE "=>$this->data['length_search'], 
     "Courses.marks LIKE "=>$this->data['marks'] 
     ); 

을 내가 페이지를 매기 호출 오전 방법입니다.

$data = $this->paginate('CdmaRfReport',$cond); 

나는 도움이하지 않는 것

$paginate = array(
       'Courses' => array(
        'limit' => 20, 
        'fields' => array('DISTINCT Courses.id'), 
        'page' => 1, 
        'conditions' => $cond, 
        'group' => array('id'), 
        'order' => array(
        'Courses.id' => 'asc') 
     ) 
     ); 

일을 시도했다.

는 또한 뭔가 잘못 될 수

$cond = array("DISTINCT Courses.id "=>$this->data['id_search'], 
     "Courses.length LIKE "=>$this->data['length_search'], 
     "Courses.marks LIKE "=>$this->data['marks'] 
     ); 

에도이 오류를 시도했다. 그러나 나는 그것을 알아낼 수 없다.

제안 사항을 알려주세요.

3

비슷한 문제가 발생하여 문제가 발생했습니다. 데이비드 Z의 해결책은 나를 위해 작동하지 않았지만, $ paginate의 그룹 변수가 나를 위해 일하는 것을 알게되었습니다.

위의 코드 샘플을 사용하면 이것이 제대로 작동한다고 생각합니다.

$paginate = array(
      'Courses' => array(
      'limit' => 20, 
      'fields' => array('Courses.id'), 
      'conditions' => $cond, 
      'group' => array('Courses.id'), 
      'order' => array('Courses.id' => 'asc') 
    ) 
    ); 

나에게 맞는 솔루션에 대해 더 자세히 알려면 회사에 속한 시스템이 있어야합니다. 내가 가진 시스템에 대한 고유 한 회사의 목록을 얻고 싶었습니다. 이것은이

도움이되었습니다 나를 위해

$this->paginate = array ('fields' => array ('Company.*'), 
         'order' => array('Company.name' => 'ASC'), 
         'group' => array('Company.id')); 
$this->set('companies', $this->paginate($this->Company->System)); 

희망을 일을 내가 사용하는 정확한 코드입니다