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()
,我可能還沒有給模型補充水分(這是一個麻煩,因爲我希望儘可能緩存)。
我有陪審團操縱了一個我在下面發佈的解決方案,但我真的很想知道我是否可以分頁才能正常工作,因爲我要多次遇到這種情況,想要讓儘可能多的邏輯擺脫觀點,只是有一種感覺可以讓這個工作起作用。
如果我誤解了你的問題,請糾正我的錯誤,但在視圖中,你想迭代'$ paginated'對象,而不是整個'$ models'集合。然後你應該得到分頁結果,並通過調用'$ models-> links()'來渲染分頁控件。 –
這是一個錯字!我正在討論$分頁,並將整個未分類的集合作爲結果。 –
我使用相對簡單的原始查詢(從一個表中取幾列並將其中兩個其他表)進行測試,它對我有效,您的問題可能與您正在運行的複雜查詢有關。 –