Ошибка: вызов функции-члена paginate() для не-объекта

Я пытаюсь преобразовать некоторые данные, полученные как объект из модели Eloquent, а затем также использовать функцию разбивки на страницы Laravel. Однако, когда я передаю данные в массив, чтобы преобразовать их, я не могу использовать метод разбиения на страницы.

$postsPerPage = 10;

$posts = Post::where('published', '=', true)->get();

$posts = Helpers::transform_posts($posts->toArray());

// $posts = Helpers::transform_posts($posts->toArray())->paginate($postsPerPage);
// doesn't work because $posts has been cast to an array
// error: Call to a member function paginate() on a non-object

return View::make('blog.index', ['posts' => $posts]);

Помощники класса:

public static function transform_post(array $post)
{
    $publishedDate = \Carbon\Carbon::createFromTimeStamp(strtotime($post['published_date']))->diffForHumans();

    return [
        'id' => $post['id'],
        'title' => $post['title'],
        'slug' => $post['slug'],
        'subtitle' => $post['subtitle'],
        'body' => $post['body'],
        'published' => (bool)$post['published'],
        'published_date' => $post['published_date'],
        'published_date_for_humans' => $publishedDate
    ];
}

public static function transform_posts(array $posts)
{
    foreach ($posts as &$array) {
        $array = Helpers::transform_post($array);
    }
    return $posts;
}

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

Изменить: теперь это решено с помощью:

    $posts = Post::where('published', '=', true)->get()->toArray();

    $posts = Helpers::transform_posts($posts);

    $posts = Paginator::make($posts, 0 , $postsPerPage);

    return View::make('blog.index', ['posts' => $posts]);

person babbaggeii    schedule 19.03.2014    source источник


Ответы (2)


Попытайся:

$posts = Post::where('published', '=', true)->get()->toArray();

$paginator = Paginator::make($posts, $totalItems, $perPage);
person JulianoMartins    schedule 19.03.2014

Вы пытались разбить на страницы без преобразования $posts в массив в первую очередь?

$posts = Post::where('published', '=', true)->paginate($postsPerPage);
person Dimitrios Kontoulis    schedule 19.03.2014