(Laravel) DBクラスとクエリビルダの違い・使い方

(Laravel) DBクラスとクエリビルダの違い・使い方

 

本記事では、
LaravelのDBクラスとクエリビルダについて、使い方などを解説していく。

 

初めに補足説明しておくと、
DBクラスとクエリビルダはどちらもデータベースを操作できる機能を備えたものだが、
それぞれ異なる特徴を持った別々の機能であるということを押さえておいてほしい。

本記事ではDBクラスとクエリビルダそれぞれについて解説をしていく。

 

(Laravel) DBクラスとは

LaravelのDBクラスとは、
Laravelに用意されている最もシンプルなデータベースアクセス機能のことだ。

まずはLaravelでのデータベースアクセスの基本中の基本と言った機能。

#DBクラス

Illuminate\Support\Facades\DB;

 

SQLを直接実行するメソッドが使えるのが特徴で、
SQLを原文のままPHPから使用したい場合に重宝する。

#DBクラスを使ってinsertを実行する例

DB::table('books')->insert([
        [
          'book_name' => 'ブック1',
          'author' => '著者1',
          'price' => 1000,
          'stocks' => 20,
          'release_dt' => date('Y-m-d H:i:s'),
        ],
        [
          'book_name' => 'ブック2',
          'author' => '著者2',
          'price' => 2000,
          'stocks' => 30,
          'release_dt' => date('Y-m-d H:i:s'),
        ],
        [
          'book_name' => 'ブック3',
          'author' => '著者3',
          'price' => 1200,
          'stocks' => 150,
          'release_dt' => date('Y-m-d H:i:s'),
        ],
      ]);
    }

 

合わせて読みたい

DBクラスとは対照的に、SQLをオブジェクト思考でPHPから使用したい場合は、laravelのeloquent機能を使用することでよりプログラミング思考でDB操作が可能となるだろう。以下参考記事。

(Laravel) Eloquentの使い方を解説

 




LaravelのDBクラスの使い方

では次に、DBクラスの使い方を紹介していく。

 

Illuminate\Support\Facades\DB 名前空間をインポートして使用する

DBクラスは、
Illuminate\Support\Facades\DB 名前空間に機能がまとめられており、
このクラスをインポートして使用する。
コントローラとかの先頭に記述して使う。

#DBクラスを使用する

use Illuminate\Support\Facades\DB;

 

DBクラスのメソッドの使い方

DBクラスの基本的な使い方は以下のようになっている。

#DBクラスの基本的な使い方

$items = DB::命令文の種類(‘実際のSQL文’);

 

DBクラスの静的メソッドにアクセスする。
メソッドは「命令文の種類(‘実際のSQL文’)」と言う形になっている。

以下、DBクラスのselectメソッドを実行する例。

$items = DB::select(‘select * from テーブル名’);

 

命令文はselectなので、DB::select()メソッドを実行し、引数に実際のSQLクエリ文を記述する。

 

DBクラスの使い方
  • Illuminate\Support\Facades\DB 名前空間をインポートする
  • DBクラスの静的メソッドを呼び出して実行する
  • メソッドの引数にSQLクエリ文を直接書く

 

SQLの結果の$itemsは、取得結果の配列をviewに渡すことができる。
上記はselect文での例だが、他にもinsertやupdateなど基本的なSQLのメソッドは揃っている。

SQLをベタがきするためPHPらしくはないが、
SQLが分かってさえいれば、一番てっとり早いDBへのアクセス方法だ。

 

DBクラスの、プレースホルダの使い方

DBクラスのプレースホルダとは、
SQLに引数を渡すことができる機能だ。

プレースホルダは、
:キー と言う書式でSQL文内に設置して置くことで、任意の値を埋め込むことができる。

以下プレースホルダの使い方の例。

public function index(Request $request) {

    $param = ['id' => $request->id];
    $items = DB::select(‘select * from テーブル名 where id = :id’, $param);

}

 

 

  1. :idと言うプレースホルダを、を第一引数のクエリ文に設置してする。
  2. 置換用データ配列(置換対象キー => 置換データ)を第二引数に指定する。置換用データ配列のキーとプレースホルダが一致した場合、バリュー(置換データ)をクエリに埋め込む。

 

プレースホルダは複数指定可能。
連想配列で各プレースホルダに対応した値を渡してあげる。

 

(Laravel) クエリビルダとは

laravelのクエリビルダとは、
DBクラスと同じくIlluminate\Support\Facades\DB 名前空間の機能だが、
DBクラスよりもよりphpらしくデータベースを操作できるようにした機能。

DBクラスの命令文メソッド文のように、直接SQL文を書くのではなく、
PHPらしくSQLを実行できるように用意された一連のメソッドでデータベースを操作する。

 

laravelのクエリビルダの使い方

以下、クエリビルダの使い方の例。

use Illuminate\Support\Facades\DB;   #忘れずに!

$item = DB::table(‘テーブル名’)->where(‘id’, $id)->first();

 

クエリビルダは「Illuminate\Support\Facades\DB」空間をインポートして使用する。

DB::tableメソッドで、テーブルを指定する。
これにより指定したテーブルの「ビルダ」が取得できる。

ビルダは、->where()のように、メソッドチェーンを使用して、PHPのメソッドを使うようにデータベース操作メソッドを実行することができる。これにより、よりPHPらしくデータベースの操作が可能となる。

 

クエリビルダを使うことメリット

上記からすでに分かるように、
前述したDB::select()メソッドなどと比較した、クエリビルダのメリットは以下となる。

laravelクエリビルダのメリット
  1. SQLを書く負担が少なくなる。
  2. SQLの記述ミスが少なくなる。

 

PHPのメソッドを通してDBを操作するため、SQLと言う他言語をプログラム内で記述する必要がなく、シームレスにPHP-DB間を繋ぐことが可能となる(まあ結局はDBの知識があることが前提だけど)。

 

演算記号の使用

where句では演算記号を使用できる
書式は以下

where(フィールド名, 演算記号, 値);

 

where(‘id’, ‘>’, 5);といった具合。
あと演算記号の他に、 ‘like’ なども指定できる。

 

whereとorWhere

where()->where

whereをつなげた場合、全てのwhereに合致した条件のものだけ検索する。
つまりAND条件のようなもの。

 

where()->orWhere

最初にwhereを指定した後に、orWhereメソッドを使用した場合、指定した条件のどれかに一致した場合に検索する。
つまりOR条件のようなもの。

 

whereRaw

検索条件を文字列で指定する
書式は以下

whereRaw(条件式, パラメータ配列);

 

使い方はほぼプレースホルダと一緒。
条件式にパラメータ配列のデータを渡して、検索条件式を作成する。
ただプレースホルダでは :name のような書き方だったが、whereRawでは「?」 を使用する。
whereRaw(‘age > ? and age < ?’, [20, 50]); といった具合。

 

関連記事

(Laravel) Eloquentの使い方を解説
(Laravel) マイグレーション実施手順
(Laravel) シーディングの 実行手順

 

DBクラス
https://readouble.com/laravel/4.2/ja/database.html

■クエリビルダ
https://readouble.com/laravel/8.x/ja/queries.html

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。