How can I paginate an array of objects in Laravel?
laravel-4, pagination, pivot-table
Solution
according to this article https://www.itsolutionstuff.com/post/how-to-create-pagination-from-array-in-laravelexample.html
you can paginate your array by creating a custom method and using LengthAwarePaginator
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
class PaginationController extends Controller
{
public function index()
{
$myArray = [
['id'=>1, 'title'=>'Laravel CRUD'],
['id'=>2, 'title'=>'Laravel Ajax CRUD'],
['id'=>3, 'title'=>'Laravel CORS Middleware'],
];
$data = $this->paginate($myArray);
return view('paginate', compact('data'));
}
public function paginate($items, $perPage = 5, $page = null, $options = [])
{
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
$items = $items instanceof Collection ? $items : Collection::make($items);
return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}
}
Problem
I'm building an application using Laravel 4.2. I have a model for `units` and another for `users` and pivot table `user_units`. Every user in this application can select a unit and add it to his favorite list then he can publish this unit with his information as an ad. I want to select all units published by all users The `user_units` (pivot) table has the following columns: ``` id user_id unit_id publish adtype addinfo created_at updated_at ``` With relations methods on models ``` public function users() { return $this->belongsToMany('User', 'user_units') ->withPivot('id','publish', 'adtype', 'addinfo'); } public function units() { return $this->belongsToMany('Unit', 'user_units') ->withPivot('id','publish', 'adtype', 'addinfo'); } ``` My query to select all published units by all users ``` // Get all published units by users for sale. $users = User::all(); $publishedSaleUnits = []; foreach($users as $user){ $userUnits = $user->units()->orderBy('adtype', 'desc')->get(); if(count($userUnits)){ foreach($userUnits as $unit){ if($unit->pivot->publish == 1 && $unit->unit_purpose_id == 1){ if( $unit->pivot->adtype ){ //push all featured ads onto the beginning of array array_unshift($publishedSaleUnits, $unit); }else{ //push all normal ads onto the end of array array_push($publishedSaleUnits, $unit); } } } } } ``` Now I got the result but I can't use pagination with results because it's an array of objects. So is there any better solution to get all published units by user with pagination?