我有一个Laravel 5.2应用程序,它与具有相当自由格式架构的数据库进行交互。我有一个特别粗糙的查询尚未转换为Eloquent语法,而我们目前只停留在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()
这样的方法可以正常工作。
The docs隐含提示使用array_slice
,但我不知道如何处理它。如果我打电话给$models->toArray()
,我可能也没有给模型加水(因为我希望尽可能多地缓存,这是一件令人讨厌的事情)。
我陪审团操纵了我在下面发布的解决方案,但我真的很想知道我是否能够分页工作,因为我会遇到这种情况。更多次,我希望尽可能多地保留视图中的逻辑,并且只是感觉有一点调整就可以使这个工作起作用。
答案 0 :(得分:0)
我当前的解决方案涉及上面显示的模型和控制器设置,然后在我的视图中:
@foreach ($paginated->forPage($paginated->currentPage(), $paginated->perPage()) as $model)
{{ $model->name }}
@endforeach
我得到了正确的模型实例,但是文档并没有表现出像这样的分页,所以我觉得还有改进的余地。