2016-08-15 50 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

任何原因你不能使用eloquents分页' - >分页($ 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 
     ];