0

我有这段代码,我想对 $shares 进行分页。

我该如何存档?

$level = Share::join('follows', 'shares.user_id', '=', 'follows.user_id')
         ->where('follows.follower_id', Auth::user()->id)
         ->where('follows.level', 1)
         ->get(array('shares.*'));
//get 10% of shares
$count = Share::count()/10;
$count = round($count);
$top10 = Share::orderBy('positive', 'DESC')
         ->take($count)
         ->get();
$shares = $top10->merge($level);
//get only unique from shares
$unique = array();
$uniqueShares = $shares->filter(function($item) use (&$unique) {
    if (!in_array($item->id, $unique)) {
        $unique[] = $item->id;
        return true;
    } else {
        return false;
    }
});
//order by id
$shares = $uniqueShares->sortBy(function($share)
{
    return -($share->id);
});
return View::make('layout/main')
->with('shares', $shares);
4

3 回答 3

1

这里有很多不必要的代码。

第一个:

$level = Share::join('follows', 'shares.user_id', '=', 'follows.user_id')
     ->where('follows.follower_id', Auth::user()->id)
     ->where('follows.level', 1)
     ->get(array('shares.*'));

为什么你要拿走所有的记录只是为了以后丢弃它?

第二:

$shares = $top10->merge($level);为什么要合并两个数组?

第三:

$uniqueShares = $shares->filter(function($item) use (&$unique) {
if (!in_array($item->id, $unique)) {
    $unique[] = $item->id;
    return true;
} else {
    return false;
}

});

必须编写此代码段,因为在上面的2nd中,您合并了两个数组,这将产生重复的条目。那么为什么要合并呢?

第四:

//order by id
$shares = $uniqueShares->sortBy(function($share)
{
    return -($share->id);
});

这是您真正想要的实际数据。

让我们回顾一下

你需要

  • 总股份的 10%
  • 按某positive列排序
  • 或许正如我所猜测的那样,按股份数量排序。

要使用内置的paginate(),你需要paginate()这是必须的。

休息很简单。

  1. 计算总结果。round(Share::count()/10)
  2. 把它paginate()作为第一个论点。
  3. 根据需要添加 order by 子句。
  4. 查看代码,看起来您不会/不应该有可能添加了distinctandgroup by子句的重复数据。

用于缓存它rememberShare::count()/10;您不需要一遍又一遍地运行查询。

你就完成了。

于 2013-08-25T15:25:43.067 回答
0

您合并查询的方式可能需要在刀片中手动创建分页,然后发送一个变量以“获取”您想要的下一组。

阅读 Laravel 文档以获取更多关于在视图中实现它并手动创建它的信息。 http://laravel.com/docs/pagination

于 2013-08-24T00:03:46.843 回答
0

试试这个,应该不错

Share::join('follows', 'shares.user_id', '=', 'follows.user_id')
            ->where('follows.follower_id', Auth::user()->id)
            ->where('follows.level', 1)
            ->paginate(20);

也许您想指定要在select()方法中选择的列。

于 2013-08-24T23:49:24.793 回答