簡體   English   中英

分頁laravel 4集合並按動態生成的變量排序

[英]paginate laravel 4 collection & sort by dynamically-generated variable

一般而言,Laravel框架/ PHP框架還算陌生,因此決定為我的第一個項目構建一個Hacker News克隆。 但是,當我嘗試通過排序算法對結果進行排序並分頁時,我遇到了一個問題。

控制器-

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對象 ,這可能會對您有所幫助。

首先,您可以從Paginator對象獲取項目:

$stories = Story::paginate();
$models = $stories->getItems();
// And then sort them...

其次,如果您需要對項目進行排序然后重新對它們進行分頁 ,則也可以這樣做。

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

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

我的解決方案中沒有將確切地為你工作-例如上例中在這里得到一切,然后嘗試對它們進行排序,並在數據庫中(幾乎你想要什么,擊敗分頁的目的)分頁每一個故事。

希望這會為您提供一些有關如何使用分頁對象的線索,如果有可能的話。

最后,我可能建議做的是做一個后台進程(例如,在cron作業上運行的命令?),該進程對每篇文章進行排名,並將排名結果存儲在緩存中。 然后,您可以按特定順序從緩存中獲取故事ID,並從數據庫中獲取。 不要嘗試將每個故事加載到數據庫中,對其進行排序,然后在用戶發出的每個頁面請求中返回它們的子集。

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM