2015-04-28 78 views
6

我遇到了從DB::select()返回的數組問題。我在我的API中大量使用skiptakeCollections雄辯的模型。不幸的是,DB :: select返回一個數組,這顯然不適用於skip和take。如何將數組轉換爲可以利用這些方法的集合?REST風格的API - 數組到集合Laravel 5

我已經試過

\Illuminate\Support\Collection::make(DB::select(...)); 

這確實如我所料不相當的工作,因爲它包裝在一個集合,而不是單個結果整個數組。

是否可以將返回從DB::select轉換爲可以使用skiptake方法的「正確」集合?

更新

我也試過:

$query = \Illuminate\Support\Collection::make(DB::table('survey_responses')->join('people', 'people.id', 
     '=', 'survey_responses.recipient_id')->select('survey_responses.id', 'survey_responses.response', 
     'survey_responses.score', 'people.name', 'people.email')->get()); 

仍然告訴我:

FatalErrorException in QueryHelper.php line 36: 
Call to a member function skip() on array 

乾杯

回答

2

對於任何事,那就是有這種在Laravel問題,我周圍想出了一個工作用以下解決方案:

 $query = DB::table('survey_responses')->join('people', 'people.id', '=', 'survey_responses.recipient_id') 
      ->select('survey_responses.id', 'survey_responses.response', 'survey_responses.score', 'people.name', 'people.email'); 
      if(isset($tags)){ 
       foreach($tags as $tag){ 
        $query->orWhere('survey_responses.response', 'like', '%'.$tag.'%'); 
       } 
      }; 

     // We apply the pagination headers on the complete result set - before any limiting 
     $headers = \HeaderHelper::generatePaginationHeader($page, $query, 'response', $limit, $tags); 
     // Now limit and create 'pages' based on passed params 
     $query->offset(
      (isset($page) ? $page - 1 * (isset($limit) ? $limit : env('RESULTS_PER_PAGE', 30)) : 1) 
     ) 
     ->take(
      (isset($limit) ? $limit : env('RESULTS_PER_PAGE', 30)) 
     ); 

基本上,我不知道,你可以運行的查詢幾乎增量,這使我能夠在之前生成分頁塊,以限制返回的數據。

10

我會嘗試:

$queryResult = DB::table('...')->get(); 

$collection = collect($queryResult); 

如果查詢結果是一個數組,那麼集合中就會填充結果。查看收集的官方文檔。 Laravel5 Collections

+0

感謝您的評論。我用Collection :: make()來管理這個部分,不幸的是我仍然無法針對集合運行skip()和take()。 – LokiSinclair

+1

我不確定你的意思是用skip()和take()。 Collection類沒有這種方法。 [收藏](http://laravel.com/api/5.0/Illuminate/Support/Collection.html)你可以發佈你想要做的收藏? – ZengineChris

+0

是的,抱歉,我對收藏類的理解有限。我想要做的是用skip和take方法手動構建分頁標題。不幸的是,這些方法似乎只能在Query \ Builder類中使用。我必須找到其他方法。不過謝謝。 – LokiSinclair