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()'来渲染分页控件。 –
这是一个错字!我正在讨论$分页,并将整个未分类的集合作为结果。 –
我使用相对简单的原始查询(从一个表中取几列并将其中两个其他表)进行测试,它对我有效,您的问题可能与您正在运行的复杂查询有关。 –