niko craft
niko craft

Reputation: 2977

Laravel 5.3 convert query builder to LengthAwarePaginator

I need to use switch cases to add constraints to the query I need to run. I need it to work with pagination, I tried this:

$albums = Album::with(array(
                'images' => function ($query) {
                    $query->orderBy('order', 'asc');
                }
            ))
            ->where('votes.votable_type','App\Models\Album')
            ->groupBy('albums.id');
            $albums->published()->orderBy('created_at', 'desc')->paginate(30);
            dd($albums);

and I get

Builder {#361 ▼
  #query: Builder {#350 ▶}
  #model: Album {#351 ▶}
  #eagerLoad: array:2 [▶]
  #macros: array:5 [▶]
  #onDelete: Closure {#364 ▶}
  #passthru: array:11 [▶]
  #scopes: array:1 [▶]
  #removedScopes: []
}

If I run

$albums = Album::with(array(
                'images' => function ($query) {
                    $query->orderBy('order', 'asc');
                }
            ))
            ->where('votes.votable_type','App\Models\Album')
            ->groupBy('albums.id')
            ->published()->orderBy('created_at', 'desc')->paginate(30);
            dd($albums);

I get

LengthAwarePaginator {#467 ▼
  #total: 97
  #lastPage: 4
  #items: Collection {#872 ▶}
  #perPage: 30
  #currentPage: 1
  #path: "http://images.dev"
  #query: []
  #fragment: null
  #pageName: "page"
}

why is there difference between these two approaches? I need to use first approach to be able to add constraints using switch case, I can't do that using second approach. But with first approach I do not get LengthAwarePaginator, how to fix it so that I get that?

Upvotes: 0

Views: 534

Answers (1)

Jan Willem
Jan Willem

Reputation: 1320

You should redeclare the variable $albums if you wish it to be saved to this variable. Change this:

$albums->published()->orderBy('created_at', 'desc')->paginate(30);

To:

$albums = $albums->published()->orderBy('created_at', 'desc')->paginate(30);

Upvotes: 2

Related Questions