Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php paginate laravel 4系列和;按动态生成的变量排序_Php_Pagination_Laravel - Fatal编程技术网

Php paginate laravel 4系列和;按动态生成的变量排序

Php paginate laravel 4系列和;按动态生成的变量排序,php,pagination,laravel,Php,Pagination,Laravel,一般来说,我对Laravel框架/PHP框架相当陌生,并决定为我的第一个项目构建一个黑客新闻克隆。但是,当我尝试使用排序算法对结果进行排序并对结果进行分页时,遇到了一点问题 控制器- public function index() { // tried Story::paginate(10) here instead, results in error $stories = Story::all(); $stories = $stories->sortBy(fun

一般来说,我对Laravel框架/PHP框架相当陌生,并决定为我的第一个项目构建一个黑客新闻克隆。但是,当我尝试使用排序算法对结果进行排序并对结果进行分页时,遇到了一点问题

控制器-

public function index()
{
    // tried Story::paginate(10) here instead, results in error
    $stories = Story::all();

    $stories = $stories->sortBy(function($story) 
    {
         return $story->getScore(); // returns score generated from HN algorithm
    })->reverse();

    return View::make('stories.index')->with('stories', $stories);
}
该视图只是一个“foreach($stories as$story)”循环

上面的代码工作正常,但没有分页。在sortBy之前调用paginate会返回错误(Paginator类没有sortBy方法),在sortBy之后调用paginate也会返回错误


那么,我如何对结果进行分页,并根据动态生成的分数进行排序呢?谢谢。

正如评论所建议的,您可以在分页之前排序,而不是在分页之后排序(如果可以的话,这可能意味着使用SQL对其排序,而不是在事实之后排序)

无论如何,由于缺乏信息,我不确定什么适合您的用例。这里有一些方法可以帮助您使用

首先,可以从Paginator对象获取项目:

$stories = Story::paginate();
$models = $stories->getItems();
// And then sort them...
第二,如果您需要对项目进行排序,然后,您也可以这样做

$stories = Story::all();
$stories->sortBy( ... );

$paginated = Paginator::make($stories, $total, $perpage);
我的任何解决方案都不会完全适用于您—例如,这里的最后一个示例获取所有内容,然后尝试对它们进行排序,并对数据库中的每个故事进行分页(这与您想要的几乎完全不同,无法达到分页的目的)

希望这能为您提供一些关于如何使用分页对象的线索,如果这种方法可能有用的话

最后,我建议做的是创建一个后台进程(例如,在cron作业上运行的命令?),对每个文章进行排序,并将排序结果存储在缓存中。然后,您可以从缓存中按特定顺序获取故事ID,并从数据库中获取这些ID。不要尝试加载数据库中的每个故事,对它们进行排序,然后在用户发出的每个页面请求中返回它们的子集


希望这会有所帮助。

在它成为
分页器
对象之前,您需要使用
sortBy
。以后不要了。