2017-05-10 10 views
0

Products belongsToMany CategoriesCategories hasMany Products, 내 Product보기 내 모든 범주의 목록을 보여주고 있지만 페이지 매기기 또는이 결과를 제한하고 싶습니다. 내가 뭔가를 쪽수를 매기다 $this->paginate()를 설정해야합니다 알고관련 레코드를 페이지 매기기하는 방법은 무엇입니까?

$product = $this->Products 
    ->findBySlug($slug_prod) 
    ->contain(['Metas', 'Attachments', 'Categories']) 
    ->first(); 

$this->set(compact('product')); 

그러나 나는 제품 내부의 범주를 쪽수를 매기다하기 위해 노력 얻을 수 : ProductsController

내 현재 코드입니다. 너희들이 나를 이해할 수 있기를 바란다.

업데이트 : 현재 나는이 일어나고 있습니다

$product = $this->Products->findBySlug($slug_prod)->contain([ 
       'Metas', 
       'Attachments', 
       'Categories' => [ 
       'sort' => ['Categories.title' => 'ASC'], 
       'queryBuilder' => function ($q) { 
        return $q->order(['Categories.title' => 'ASC'])->limit(6); 
       } 
       ] 
      ])->first(); 

한계 작동하지만 난 매기기가 연결을 paginating 지원하지 않습니다 아직

+0

참조 무엇합니까 "다른 컨트롤러"는 소리가 나에게,이 중 하나와 함께해야 마치 너 모두 페이지 연결을 사용하여 레코드 관련 데이터를 표시하는 것입니까? – ndm

+0

당신이 옳다고 생각합니다. 제 코드가 바뀌 었습니다. 다시 확인해 주시겠습니까? – noeyeat

답변

1

페이지를 매기는 방법을 알고하지 않습니다, 당신은 할 수 있습니다 별도의 쿼리에서 수동으로 관련 기록을 읽고이의 라인을 따라 하나, 어떤 페이지를 매기합니다 : 당신이 당신의를 표시 할 수 있습니다 뷰 템플릿에 다음

$product = $this->Products 
    ->findBySlug($slug_prod) 
    ->contain(['Metas', 'Attachments']) 
    ->first(); 

$categoriesQuery = $this->Products->Categories 
    ->find() 
    ->matching('Products', function (\Cake\ORM\Query $query) use ($product) { 
     return $query->where([ 
      'Products.id' => $product->id 
     ]); 
    }); 

$paginationOptions = [ 
    'limit' => 6, 
    'order' => [ 
     'Categories.title' => 'ASC' 
    ] 
]; 

$categories = $this->paginate($categoriesQuery, $paginationOptions); 

$this->set(compact('product', 'categories')); 

을및 평소와 같이 $categories을 별도로 페이지 매김하십시오.

+0

이런 식으로 생각했지만 다른 오류가 발생합니다. SQLSTATE [42S22] : 열을 찾을 수 없습니다 : 1054 알 수없는 'Product.id'의 'on 절' – noeyeat

+0

SQL에서 'Product .id = : c0 AND Product.id = ProductsCategories.product_id)'두 번째 것은 맞지만 첫 번째 것은 틀렸고 조건이 없기 때문에 왜 그런지 모르겠습니다. – noeyeat

+0

나는 그것을 작동 시켰습니다. 오타 였어. Product.id 대신 Products.id라고 말한 것과 같아야합니다. 고마워요! – noeyeat