ハジメトーク最新記事

ハジメクリエイト社員による、日々の業務やトレンド、日常のアレコレについてお届けします。

もっと見る

【Laravel基礎】データ取得数を制御するtake()とlimit()についての解説

2025.12.09

こんにちは、Morimotoです。

Laravelでのシステム開発をしていると、データベースからデータを取得する際に、「最新の5件だけ欲しい」「表示する件数を制限したい」という状況になることがあります。

そんな時に使うのが、Laravelで提供されているデータの取得件数を制限するメソッドです。
代表的なものがtake()メソッドとlimit()メソッドの2つです。

自分も含め「名前が違うけど、何が違うの?」「どっちを使えばいいの?」と疑問に思う初心者の方も多いはず。
ということで、この記事では2つのメソッドの違いと使い方を解説していきます。


take()とlimit()、結論から言うと「ほぼ同じ」です!

いきなりですが、実はLaravelにおいて、 take()メソッドとlimit()メソッドは、機能としては「ほぼ同じ」 です。

どちらも、データベースからデータを取得する際に、取得する件数を制限(指定)するために使われます。

メソッド名役割備考
take(整数)取得する件数を指定するデータを 「何件取るか (take)」 というニュアンス
limit(整数)取得する件数を制限する取得件数に 「制限をかける (limit)」 というニュアンス

どちらを使っても、生成されるSQL文は、通常、 LIMIT を含む同じものになります。

例:take(5) も limit(5) も、生成されるSQLは SELECT * FROM table_name LIMIT 5 のようになることが多いです。


なぜ2つあるの?使い分けのヒント

機能が同じなら、なぜ2つあるのでしょうか?
これには、開発者の意図や読みやすさが関係しています。

「意味」で使い分ける

Laravelは、開発者がよりコードの意味を読み取りやすいように、複数のメソッド名を提供していることがあります。

  • limit():SQL標準のキーワードであるLIMIT句に由来しており、 「制限」 を加えるという意味合いが強いです。
    • SQLに慣れている人にとっては馴染み深い表現です。
  • take():結果セットから 「取得する」 件数を指定するという、より直感的な表現です。
    • 「上から何件取る?」という日本語の感覚に近いです。

クエリビルダとEloquent

基本的にはどちらも使えますが、Laravelの公式ドキュメントや多くのコード例では、以下のような使い方が見受けられます。

🔹 クエリビルダ(DBファサードを使う場合)

どちらも使われますが、SQLのLIMITに直接対応する limit() が使われることも多いです。

// DBファサードを使ったクエリビルダの例
$users = DB::table('users')
             ->where('is_active', true)
             ->limit(10)// limit()で取得件数を制限
             ->get();

🔹 Eloquent(モデルを使う場合)

よりオブジェクト指向的な表現である take() が使われる傾向があります。

// Userモデル(Eloquent)を使った例
use App\Models\User;

$latestPosts = User::where('status', 'published')
                   ->orderByDesc('created_at')
                   ->take(5)// take()で最新の5件を取得
                   ->get();

サンプルコードで確認してみる

実際にコードを書いてみて、挙動を確認してみます。

ここでは、postsテーブルからデータを取得する例を考えます。

📰 投稿データから最新の3件を取得する

orderByDesc('created_at')で新しい順に並び替えてから、take(3)またはlimit(3)で3件に制限します。

// 📝 postsテーブルから最新の3件を取得する

// 1. take()を使った場合
$latestPosts_take = DB::table('posts')
                      ->orderByDesc('created_at') // 新しい順に並び替え
                      ->take(3)                    // 3件だけ取得
                      ->get();

// 2. limit()を使った場合
$latestPosts_limit = DB::table('posts')
                       ->orderByDesc('created_at') // 新しい順に並び替え
                       ->limit(3)                   // 3件に制限
                       ->get();

// $latestPosts_take と $latestPosts_limit の中身は、通常、同じになります!

// モデル(Post::class)を使っている場合も同じです。
$latestPosts_eloquent = Post::orderByDesc('created_at')
                            ->take(3) // または limit(3)
                            ->get();

💡 どちらを使ってもOK!

ご覧の通り、どちらのメソッドを使っても、データの件数を制限するという目的は達成できます

なので、ご自身が「分かりやすい」「読みやすい」と感じる方を使うとOKです


skip()とoffset()も一緒に覚えよう!

take()/limit()とセットで覚えておきたいのが、 データの取得開始位置を指定する メソッドです。

  • skip(整数)「何件スキップするか」 を指定
  • offset(整数)「何件目から開始するか」 を指定 (SQLのOFFSET句に対応)

これらのメソッドは、Webサイトのページネーション(ページ送り)を自作する際などに非常に重要になります。

ページネーションの仕組みのイメージ

  • 1ページ目skip(0)->take(10) (最初の0件をスキップして、10件取得)
  • 2ページ目skip(10)->take(10) (最初の10件をスキップして、次の10件を取得)
  • 3ページ目skip(20)->take(10) (最初の20件をスキップして、次の10件を取得)
メソッド名役割
take() / limit()取得する件数を指定
skip() / offset()取得を開始する位置を指定

💡 サンプルコード (ページネーション風)

// 1ページあたりの表示件数を10件と設定
$perPage = 10;
// 現在のページ番号が2だと仮定
$currentPage = 2;

// スキップする件数を計算: (2ページ目 - 1) * 10件 = 10件スキップ
$skipCount = ($currentPage - 1) * $perPage;

$page_2_data = DB::table('products')
                   ->orderBy('id')
                   ->skip($skipCount)// 最初の10件をスキップ
                   ->take($perPage)// 次の10件を取得
                   ->get();

まとめ

メソッド機能使い分け
take(N)取得件数をN件に制限より直感的でEloquentでよく使われる
limit(N)取得件数をN件に制限SQLのLIMITに対応し、クエリビルダでよく使われる
skip(N)N件をスキップし、そこから取得開始ページネーションの開始位置指定に使う
offset(N)N件をスキップし、そこから取得開始skip()と同じ機能で、SQLのOFFSETに対応

Laravelのtake()limit()はどちらを使っても問題ありませんが、コードの意図が伝わりやすい方を選ぶのが良いでしょう。
今回の記事が、皆さんのLaravel学習の助けになれば嬉しいです。

それでは。


🏢 株式会社ハジメクリエイトについて

この記事は、 株式会社ハジメクリエイト のエンジニアが執筆しました。


💻 Webシステム開発のプロフェッショナル

私たちは、ビジネスの成長をサポートするため、 PHPを用いたオーダーメイドのシステム開発 を提供しています。
お客様一人ひとりのニーズに応じたカスタムシステムを、 企画から開発・運用まで一貫してサポート
さらに、 React Nativeを活用したiOS/Android対応のアプリ開発 も得意としています。

単に「作る」だけでなく、
課題の本質に向き合い、最適な解決策を提案する のがハジメクリエイトのスタイルです。


🧑‍💻 一緒に働く仲間を探しています!

株式会社ハジメクリエイトでは、 自ら考え行動できるエンジニア を募集しています。
「私はこれがしたい!」という想いを持つあなた、一緒にモノづくりを楽しみませんか?

  • 技術で人の役に立ちたい
  • 意見が通る小さなチームで働きたい
  • フロントエンドもバックエンドも、いろいろ挑戦してみたい
  • お客さんと一緒にプロジェクトを育てたい

そんな気持ちがある方なら、きっと居心地のいい環境だと思います。
正社員はもちろん、パートタイムでの参加も歓迎中! 柔軟な関わり方で、あなたらしく働いてください。

👉 採用情報を見る
👉 お問い合わせはこちら


ちょっとでも「この会社、気になるな」と思ったら、ぜひお気軽にご連絡ください📩
最後まで読んでいただきありがとうございました!

  • Laravel
  • PHP

この記事を書いた人

Morimoto

Programmer Morimoto

Web制作をメインに、最近はWeb開発にも携わるようになってきました。新しく学んだことやつまづいたことなどを書いていきます。three.jsを使った3Dアニメーションにも興味があります。

Morimotoの書いた記事一覧へ

ハジメクリエイトでは一緒に働く仲間を募集しています!

関連記事