[英]Laravel Pagination with hydrated Model collection
我有一個Laravel 5.2應用程序,它與具有漂亮自由格式模式的數據庫進行交互。 我有一個特別粗糙的查詢,尚未轉換為Eloquent語法,相反,我們hydrateRaw
陷入了hydrateRaw
:
<?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()
類的方法可以正常工作。
文檔暗暗暗示了使用array_slice
但是我不確定該怎么做。 如果我調用$models->toArray()
我可能還沒有對模型進行水合處理(這很麻煩,因為我希望盡可能多地緩存)。
我已經陪審團提出了我下面發布的解決方案,但是我真的很想知道我是否可以通過分頁來正常工作,因為我將再次遇到這種情況,並希望保持盡可能多的時間邏輯上盡可能地脫離觀點,只要稍作調整就能使它起作用。
我當前的解決方案涉及上面顯示的模型和控制器設置,然后在視圖中我具有:
@foreach ($paginated->forPage($paginated->currentPage(), $paginated->perPage()) as $model)
{{ $model->name }}
@endforeach
我得到了正確的模型實例,但是文檔並沒有顯示分頁那樣工作,因此我覺得還有改進的空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.