簡體   English   中英

Laravel分頁與水合模型集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM