【Laravel8】DBからデータ取得方法解説- (初級レベルからOK)

2021年11月24日

はじめに

Laravel8を使ってDBからデータを取得する方法を解説します。
DBはMysqlを使いますが、他のDBをお使いの方でも大差ないかなと思います。

DB接続設定、DBデータ投入は別記事をご参照ください。

LaravelでのDB接続については→ https://karaagelovers.com/laravel-table-creation/
Laravelでのスキーマー作成については→ https://karaagelovers.com/create-mysql-table-with-laravel-commands/
Laravelでのマスターデータ投入については→ https://karaagelovers.com/insert-table-record-with-laravel-commands/

Laravelでのテストデータ投入については→ https://karaagelovers.com/insert-dummy-data-with-laravel-commands/

PJ作成、各種設定込みのサンプル

このページでは主にLaravelのクエリビルダー(SQL)の書き方について説明しています。
システムでSQLを実行するにはコントローラー、ルーティング等の設定が必要です。
設定方法についてはこちらで解説していますので合わせてご確認ください!

テーブル定義

テーブル名 tests

FieldTypeNullKeyDefaultExtra
idbigint unsigned NOPRINULLauto_increment
usernamevarchar(255)NONULL
ageintNONULL
salaryintNONULL
created_attimestampYESNULL
updated_attimestampYESNULL
テーブル定義

テーブルデータを取得する

全カラム、全件取得する

※Testはテーブル名、あなたのシステムのテーブル名に書き換えてください

Test::all()

検索条件、抽出カラムを指定

システムで使うときは抽出条件や出力項目を絞ることが多いので、
圧倒的にこっちの方が利用することが多いと思います。

全カラム、全件取得する

まずはTest::all()と同じの全カラム、全件取得。

Test::select()->get();

出力カラムを指定

出力したいカラム名を指定 
username age salaryに絞って抽出

Test::select('username','age','salary')->get();

特定条件に絞り抽出

年齢が100歳の人を抽出

    $Tests = Test::select()
    ->where('age',100) 
    ->get()

年齢が50歳未満の人を抽出

        $Tests = Test::select()
        ->where('age', '<' ,50) 
        ->get();

年齢が50歳未満で給料が500万以上の人を抽出

    $Tests = Test::select()
    ->where('age', '<' ,50) 
    ->where('salary', '>=' ,5000000) 
    ->get();

年齢が30歳から50歳の人を抽出

    $Tests = Test::select()
    ->whereBetween('age', [30, 50])
    ->get();

年齢が30歳から50歳以外の人を抽出

    $Tests = Test::select()
    ->whereNotBetween('age', [30, 50])
    ->get();

User IDが1,2,3の人を抽出

    $Tests = Test::select()
    ->whereIn('id', [1, 2, 3])
    ->get()

User IDが1,2,3の以外の人を抽出

    $Tests = Test::select()
    ->whereNotIn('id', [1, 2, 3])
    ->get();

更新日時がnullの人を抽出

    $Tests = Test::select()
    ->whereNull('updated_at')
    ->get()

更新日時がnullじゃない人を抽出

    $Tests = Test::select()
    ->whereNotNull('updated_at')
    ->get()

2021-11-21に登録した人を抽出

    $Tests = Test::select()
    ->whereDate('created_at', '2021-11-21')
    ->get();

11月に登録した人を抽出

    $Tests = Test::select()
    ->whereMonth('created_at', '11')
    ->get()

21日に登録した人を抽出

    $Tests = Test::select()
    ->whereDay('created_at', '21')
    ->get();

2021年に登録した人を抽出

    $Tests = Test::select()
    ->whereYear('created_at', '2021')
    ->get();

08:00:00以降に登録した人を抽出

    $Tests = Test::select()
    ->whereTime('created_at', '>=', '08:00:00')
    ->get();

更新日が登録日より後の人を抽出

    $Tests = Test::select()
    ->whereColumn('updated_at', '>', 'created_at')
    ->get()

もっと知りたいと思われた方は公式サイトも併せてご確認ください。

https://readouble.com/laravel/8.x/ja/queries.html

Posted by karaagelovers