Грешка: Извикване на членска функция 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