Laravel simplePaginate()用于分组数据

时间:2019-02-01 14:20:48

标签: laravel eloquent laravel-collection

我有以下查询。

$projects = Project::orderBy('created_at', 'desc');
$data['sorted'] = $projects->groupBy(function ($project) {
    return Carbon::parse($project->created_at)->format('Y-m-d');
})->simplePaginate(5);

当我尝试使用simplePaginate()方法进行分页时,出现此错误。

  

stripos()期望参数1为字符串,给定对象

在这种情况下如何对分组数据进行分页?

4 个答案:

答案 0 :(得分:1)

created_at属性已经强制转换为Carbon对象(在laravel模型中默认)。这就是为什么您会收到该错误。试试这个:

$projects = Project::orderBy('created_at', 'desc')->get();
$data['sorted'] = $projects->groupBy(function ($project) {
    return $project->created_at->format('Y-m-d');
})->simplePaginate(5);

此答案仅用于您遇到的错误。现在,如果您需要QueryBuilder的帮助,能否提供您期望得到的结果的示例以及数据库结构的示例?

答案 1 :(得分:0)

应该在查询而不是集合上调用分页方法。

您可以尝试:

$projects = Project::orderBy('created_at', 'desc');
$data['sorted'] = $projects->groupBy('created_at');

答案 2 :(得分:0)

问题已解决。我是通过以下示例创建自定义分页器的: https://stackoverflow.com/a/30014621/6405083

if

答案 3 :(得分:0)

simplePaginate方法存在于以下路径中:

Illuminate\Database\Eloquent\Builder.php::simplePaginate()