2016-08-15 3 views
1

제품 API를 만들고 있습니다. 나는 더 많은 결과를 얻었는지를 알려주는 변수와 컬렉션을 반환 할 필요가있다. 마지막 결과는 방금 더 많은 부하를 표시하거나 숨기도록 반환했다. 나는 그것을 반환하는 방법을나는 더 많은 결과가 남아 있는지를 계산합니다.

$query = Product::query(); 
$query->where('category_id', $request->get('category_id')); 
$query->orderBy('order', 'asc') 
    ->orderBy('name', 'asc') 
    ->skip($skip) 
    ->take($take); 

그리고이은 다음과 같습니다 :

return [ 
    'products' => $query->get(['id', 'name', 'front_image', 'back_image', 'slug']), 
    'has_more' => ???? 
]; 

가 어떻게이 has_more을 계산할 수 있습니다 이것은 지금까지 내가 가지고있는 모든입니까?

+4

당신이 웅변을 사용할 수없는 어떤 이유로 페이지 매김'-> paginate ($ take)' –

답변

0

가장 쉬운 방법은 두 번 데이터베이스를 조회하는 것입니다 :

$query = Product::query() 
    ->where('category_id', $request->get('category_id')) 
    ->orderBy('order', 'asc') 
    ->orderBy('name', 'asc'); 

$count = $query->count(); 
$hasMore = $skip + $take < $count; 
$models = $query->skip($skip) 
    ->take($take) 
    ->get(['id', 'name', 'front_image', 'back_image', 'slug']); 

return [ 
    'products' => $models, 
    'has_more' => $hasMore 
]; 
0

당신은 단지 전체 레코드의 수를 얻고있다 위해 단순히 확인을 할 수있는 더욱 그렇다 같은 :

<?php 
     $query = Product::query() 
        ->where('category_id', $request->get('category_id')); 
        ->orderBy('order', 'asc') 
        ->orderBy('name', 'asc'); 

     $count = $query->count(); 

     return [ 
      'products' => $query->skip($skip) 
           ->take($take) 
           ->get(['id', 'name', 'front_image', 'back_image', 'slug']), 
      'has_more' => ($hm = ($count - ($take + $skip))) > 0 ? $hm : false 
     ]; 
관련 문제