2014-03-19 37 views
2

我试图将一些数据作为对象从Eloquent模型中检索出来,然后使用Laravel的分页功能。但是,当我将数据转换为数组以便转换数据时,我无法使用paginate方法。错误:调用非对象的成员函数paginate()

$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]); 

回答

3

试试:

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

$paginator = Paginator::make($posts, $totalItems, $perPage); 
+0

完美,谢谢。请参阅编辑更新的代码。 – babbaggeii

0

你试过没有放在第一位铸造$帖子到一个数组进行分页?

$posts = Post::where('published', '=', true)->paginate($postsPerPage); 
相关问题