Laravelの $builder->paginate() はクエリを2回走らせる


コレクションの全体から総数を計算しているのかと思ったが、そんなことは無かった。
考えてみれば LIMIT .. OFFSET .. かけているから当然だった。

SQL発行回数が増えるので、Paginate対象が重いSQLだと注意。

以下証拠。

Route::get('test', function() {
    $interns = App\Models\User::paginate(30);
    throw new \Exception;
});

ちなみに軽量版である simplePaginate() でも同様。

Route::get('test', function() {
    $interns = App\Models\User::simplePaginate(30);
    throw new \Exception;
});