Laravel クエリビルダ 調べてみた
クエリビルダとは
クエリビルダとは、メソッドチェーンを用いてSQL文を簡単に組み立てる仕組みです。
メソッドチェーンを用いることでコードを書く感覚でSQL文を作成することができます。
また、使用されるメソッド名も実際のSQL文で使用されるものと似たような名前になっているので、SQLを知っている方であればコードを見るだけで大体の理解ができます。
Laravelにおけるクエリビルダ
Laravelでもクエリビルダを利用してデータベース操作を行うことができます。
Laravelでデータベース操作と聞くと、Eloquentも思い浮かべるかもしれません。
実は、Eloqunetもクエリビルダの仕組みを利用しています。
クエリビルダとEloquentの違いはいくつかあるのですが、注意すべき点は以下2点です。
①EloqunetはSQLの知識が乏しくても操作がしやすい(SQL文が想定しにくい)
②Eloquentでリレーションを実装する際は、eloquentモデルが必要となる。
どちらも一長一短であると思うので、実際の状況やご自身の経験でどちらを使うか決めるのがよいと思われ。
※Eloquentについてはこちらをご参照ください。
では、実際にクエリビルダを用いた例を紹介していきます。
クエリビルダを取得するには、
①DBファザードを使用する
②DBファザードの実態であるIlluminate\Database\Connectionを利用する
この2種類がありますが、今回はDBファザードを利用した例をご紹介します。
なお、今回ご紹介するメソッドはクエリビルダの一部に過ぎないので、詳しくは公式ドキュメントをご参照ください。
クエリビルダの取得
クエリビルダの取得には、DBファザードである\Illuminate\Suuport\Facades\DBを使用します。
そこからtableメソッドを使用し、引数に該当テーブルを指定すればクエリビルダが使用できます。
以下例になります。
use Illuminate\Suuport\Facades\DB;
$programs = DB::table('programs');
または
$programs = \Illuminate\Support|facedes\DB::table('programs');
カラムの指定
特定のカラムを指定するにはselectメソッドが使用できます。
引数に参照したいカラム名を指定します。
$result = $programs->select('name', 'email', 'id');
条件検索
特定の条件で値を検索したい場合は、whereメソッドが使用できます。
$result = $programs->select('name', 'email', 'id')
->where('name', 'like', '%オールナイトニッポン%');
上記の例では、nameに「オールナイトニッポン」が入っている値のみを検索しています。
結合(リレーション)
テーブルの結合は、joinメソッド・leftjoinメソッド・rightjoinメソッドが使用できます。
以下の例では、leftjoinメソッドを利用して左外部結合をしています。
$result = $programs->select('name', 'email', 'id')
->where('name', 'like', '%オールナイトニッポン%')
->leftjoin('corners', 'programs.id', '=', 'program_id');
並び替え
値の並び替えにはorderByメソッドが使用できます。
$result = $programs->select('name', 'email', 'id')
->where('name', 'like', '%オールナイトニッポン%')
->leftjoin('corners', 'programs.id', '=', 'program_id')
->orderBy('id', 'asc');
クエリの実行
クエリの実行にはgetメソッド・firstメソッドが使用できます。
getメソッドは該当の値全てをコレクションモデルで返します。
firstメソッドは該当の値の一番初めの1件のみを取得します。
これらのメソッドが実行されて初めてデータベース操作を実行します。
$result = $programs->select('name', 'email', 'id')
->where('name', 'like', '%オールナイトニッポン%')
->leftjoin('corners', 'programs.id', '=', 'program_id')
->orderBy('id', 'asc')
->get();
データの更新
データの更新には、updateメソッドが使用できます。
以下の例は、idが1の値の名前を変更しています。
DB::table('programs')->where('id', 1)->update(['name' => '佐久間宣行のオールナイトニッポン']);
(現在は、佐久間宣行のオールナイトニッポン0です)
データの登録
データの登録には、insertメソッドが使用できます。
DB::table('programs')->insert(['name'=>'オードリーのオールナイトニッポン', 'email' => 'XXX@XXX']);
データの削除
データの削除には、deleteメソッドが使用できます。
DB::table('programs')->where('id', 1)->delete();
以上!!!!!!!