Laravel simplePaginate () для сгруппированных данных - PullRequest
0 голосов
/ 01 февраля 2019

У меня следующий запрос.

$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быть строкой, заданным объектом

Как можно разбить на группы сгруппированные данные в этом случае?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Атрибут 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, можете ли вы привести пример ожидаемых результатов и структуру базы данных?

0 голосов
/ 02 февраля 2019

Проблема была решена.Я был создан пользовательский пагинатор с помощью этого примера: https://stackoverflow.com/a/30014621/6405083

$page = $request->has('page') ? $request->input('page') : 1; // Use ?page=x if given, otherwise start at 1
        $numPerPage = 15; // Number of results per page
        $count = Project::count(); // Get the total number of entries you'll be paging through
        // Get the actual items
        $projects = Project::orderBy('created_at', 'desc')
            ->take($numPerPage)->offset(($page-1)*$numPerPage)->get()->groupBy(function($project) {
                return $project->created_at->format('Y-m-d');
            });
        $data['sorted'] = new Paginator($projects, $count, $numPerPage, $page, ['path' => $request->url(), 'query' => $request->query()]);
0 голосов
/ 01 февраля 2019

Методы нумерации страниц должны вызываться в запросах, а не в коллекции.

Вы можете попробовать:

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