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?

Original source

Related problems