2015-07-11 49 views
0

我試圖從一個雄辯查詢(工作),然後命令數據,然後分頁數據的數據。Laravel 5.1雄辯的查詢命令通過外部數據和分頁

我有代碼按日期排序,然後分頁,但現在我想通過Facebook API獲取數據(我正確地獲取數據)。

的事情是,我不知道我應該做的第一(分頁或排序):

  • 如果我分頁第一,我不知道如何對數據進行排序,因爲對象是LengthAwarePaginator和沒有任何orderBy方法。
  • 如果我先訂購,我會得到一個集合對象,並且不能使用 - > paginate($ perPage)來完成分頁。

這是代碼:

$posts = Post::with('User')-> 
       where('created_at', '<', new \DateTime)-> 
       paginate($perPage); 
$counter = 0; 
foreach ($posts as $post) { 
    $url = 'http://myweb.com/' . $post['id']; 
    $fb_stuff = json_decode(file_get_contents('https://api.facebook.com/method/links.getStats?urls=' . $url . '&format=json'), true); 
    $posts[$counter]['share_count'] = $fb_stuff[0]['share_count']; 
    $counter++;    
} 

回答

0

如果需要由未存儲在數據庫中,那麼唯一的選擇是從數據庫中獲取的所有記錄一些值進行排序,取排序數據從外部來源(Facebook API),按用戶定義的功能對其進行排序(請參閱http://php.net/manual/en/function.usort.php),然後進行分頁。

一旦你的數據進行排序,你可以很容易地創建一個分頁程序對象獲得分頁版本:

$paginator = new \Illuminate\Pagination\Paginator($posts, $perPage, $currentPage); 

不管怎樣,這種解決方案會隨着你需要獲取來自Facebook的API的每一個數據頗重當你想要一個排序的職位列表。我懷疑你需要實時數據,所以我建議將share_count存儲在你的帖子表格中,並定期刷新它。通過運行預定的laravel命令。

+1

我只是想着最後一件事,我認爲這是面對這類問題的正確方法 – victor141516