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

laravel-dbclass-querybuilder

 

Laravelについてのメモ書き、
とくにDBクラスとクエリビルダについて

 

laravelのDBクラスとは

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

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

合わせて読みたい

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

laravel-eloquent

(Laravel) DB【Eloquentの基本的な使い方】

 

 

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();

 

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]); といった具合。

 

 

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

コメントを残す

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