Я пытаюсь преобразовать некоторые данные, полученные как объект из модели 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]);