本記事では、
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の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クエリ文を記述する。
- 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);
}
- :idと言うプレースホルダを、を第一引数のクエリ文に設置してする。
- 置換用データ配列(置換対象キー => 置換データ)を第二引数に指定する。置換用データ配列のキーとプレースホルダが一致した場合、バリュー(置換データ)をクエリに埋め込む。
プレースホルダは複数指定可能。
連想配列で各プレースホルダに対応した値を渡してあげる。
(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()メソッドなどと比較した、クエリビルダのメリットは以下となる。
- SQLを書く負担が少なくなる。
- 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]); といった具合。
関連記事
■DBクラス
https://readouble.com/laravel/4.2/ja/database.html
■クエリビルダ
https://readouble.com/laravel/8.x/ja/queries.html
[…] この記事に解説があります。 […]