首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按动态生成变量分页laravel 4收集和排序

按动态生成变量分页laravel 4收集和排序
EN

Stack Overflow用户
提问于 2013-09-13 21:39:19
回答 1查看 2.6K关注 0票数 1

总体来说,Laravel框架/ PHP框架非常新,并决定为我的第一个项目构建一个Hacker News克隆。但是,当我尝试通过排序算法对结果进行排序并对结果进行分页时,我遇到了一些问题。

控制器-

代码语言:javascript
运行
复制
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返回错误之前调用分页(分页器类没有sortBy方法),在sortBy之后调用分页也会返回错误。

那么,我将如何分页结果并按动态生成的分数排序呢?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-09-14 15:38:17

如注释所示,您可以在分页之前而不是之后进行排序(如果可以的话,这可能意味着使用SQL对其进行排序,而不是根据事实进行排序)。

无论如何,由于缺乏信息,我不确定什么适合您的用例。下面是一些可以使用分页对象的方法,这可能会对您有所帮助。

首先,您可以从Paginator对象中获取这些项:

代码语言:javascript
运行
复制
$stories = Story::paginate();
$models = $stories->getItems();
// And then sort them...

其次,如果您需要对项进行排序,然后进行重新分页,您也可以这样做。

代码语言:javascript
运行
复制
$stories = Story::all();
$stories->sortBy( ... );

$paginated = Paginator::make($stories, $total, $perpage);

我的任何一种解决方案都不会完全适用于您--例如,这里的最后一个示例获得了所有内容,然后尝试对它们进行排序,并对数据库中的每个故事进行分页(这几乎不符合您想要的内容,就违背了分页的目的)。

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

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

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18795661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档