我对Laravel的5.2分页符的奇怪行为有疑问: 使用查询构建器我进行了数据库查询并尝试对结果进行分页。
如果我查看查询结果,我会看到这一点(我只留下了一些记录):query builder result。
好的,让我们尝试对其进行分页:pagination result。
我们可以看到订单混乱并且有一些重复的项目。
如果我尝试使用simplePaginate(12)
方法而不是paginate(12)
,则结果与预期一致。
您如何看待这种行为?如何解决这个问题呢?感谢。
UPD:添加了代码示例:
public static function getForCategoryPage($cityAlias, $categoryAlias, ParameterBag $params = null)
{
$appendsParams = [];
$builder = DB::table('partners')
->join('cities', 'cities.id', '=', 'partners.city_id')
->join('categories', 'categories.id', '=', 'partners.category_id')
->join('comments', 'comments.partner_id', '=', 'partners.id', 'full outer')
->select([
'partners.id', 'partners.name', 'categories.alias as category', 'categories.name as categoryname',
'partners.alias', 'partners.body', 'partners.logo', DB::raw('AVG(comments.value) as rating'),
'partners.updated_at as update_date'
])
->where([
['cities.alias', $cityAlias],
['categories.alias', $categoryAlias],
['partners.published', true]
])
->groupBy([
'partners.id', 'cities.alias', 'categories.alias', 'categories.name'
])
->orderBy('pro', 'desc');
/* Фильтры: */
//Если есть параметр 'Наличие фотографий', подсоеденить таблицу изображений
if ($params->has('photos') and $params->get('photos') === 'on') {
$builder->join('images', 'partners.id', '=', 'images.gallery_id', 'inner');
$builder->orderBy('pro', 'desc');
$appendsParams['photos'] = 'on';
}
//Если есть параметр 'Наличие скидок', подсоеденить таблицу с акциями
if ($params->has('discounts') and $params->get('discounts') === 'on') {
$builder->join('promo', 'promo.partner_id', '=', 'partners.id', 'inner');
$builder->orderBy('pro', 'desc');
$appendsParams['discounts'] = 'on';
}
/* Сортировки: */
if ($params->has('orderby')) {
switch ($params->get('orderby')) {
//По рейтингу
case 'rating':
$builder->orderByRaw(DB::raw('rating desc nulls last'));
$appendsParams['orderby'] = 'rating';
break;
//По дате добавления
case 'date':
$builder->orderByRaw(DB::raw('update_date desc nulls last'));
$appendsParams['orderby'] = 'date';
break;
}
}
dd($builder->paginate(12)->appends($appendsParams)->keyBy('id'));
//return $builder->paginate(12)->appends($appendsParams);
}