2016-05-17 181 views
2

我有一個Laravel 5.2應用程序與具有相當自由形式架構的數據庫進行交互。我有一個尚未轉換成雄辯語法一個特別粗糙的查詢,而不是我們被卡住hydrateRaw暫且:Laravel分頁與水合模型集合

<?php                                                                

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
... 

class MyModel extends Model 
{ 
    /** 
    * Do some crazy stuff to get a MyModel Collect 
    * 
    * @params so many 
    * @return Collection 
    */ 
    public static function getModels($param1, $param2, $param3, $limit) 
    { 
     return static::hydrateRaw("SELECT table1.id, table2.name, table3.date from...", [$param1, $param2, $param3, $limit]); 
    } 
    ... 
} 

我已經嘗試了許多不同的方法將這些收集硬塞到LengthAwarePaginator,部分成功。

如果我有這樣的控制器:

$models = MyModel::getModels(1,2,3,1000); 
$paginated = new LengthAwarePaginator($models, $models->count(), 12, 2); 

而且有這樣一個觀點:

@foreach ($paginated as $model) 
    {{ $model->name }} 
@endforech 

我得到整個集合(無分頁),雖然像currentPage()工作方法正確。

The docs暗示性暗示使用array_slice但是我不確定如何處理它。如果我打電話給$models->toArray(),我可能還沒有給模型補充水分(這是一個麻煩,因爲我希望儘可能緩存)。

我有陪審團操縱了一個我在下面發佈的解決方案,但我真的很想知道我是否可以分頁才能正常工作,因爲我要多次遇到這種情況,想要讓儘可能多的邏輯擺脫觀點,只是有一種感覺可以讓這個工作起作用。

+0

如果我誤解了你的問題,請糾正我的錯誤,但在視圖中,你想迭代'$ paginated'對象,而不是整個'$ models'集合。然後你應該得到分頁結果,並通過調用'$ models-> links()'來渲染分頁控件。 –

+0

這是一個錯字!我正在討論$分頁,並將整個未分類的集合作爲結果。 –

+0

我使用相對簡單的原始查詢(從一個表中取幾列並將其中兩個其他表)進行測試,它對我有效,您的問題可能與您正在運行的複雜查詢有關。 –

回答

0

我目前的解決方案包括上面顯示的模型和控制器的設置,然後在視圖中我有:

@foreach ($paginated->forPage($paginated->currentPage(), $paginated->perPage()) as $model) 
    {{ $model->name }} 
@endforeach 

我得到正確的模型實例,但該文檔不顯示分頁這樣的工作,所以我覺得還有改進的空間。