クエリビルダとは
SQLのクエリ(テータベースに対する問い合わせ、命令文)を簡単に作成・実行できるLaravelの機能
例
-- SQL文 SELECT * FROM products; // クエリビルダ DB::table('products')->get();
クエリビルダの書き方
すべてのクエリビルダに共通
- use Illuminate\Support\Facades\DB;を記述してDBファサードのuse宣言を行う
- DB::table('テーブル名')を記述してデータベース操作を行うテーブルを指定する
SELECT文
SQL -- 1つのカラムのデータを取得する場合 SELECT カラム名 FROM テーブル名; -- 複数のカラムのデータを取得する場合 SELECT カラム名1, カラム名2, カラム名3, ...... FROM テーブル名; -- すべてのカラムのデータを取得する場合 SELECT * FROM テーブル名; クエリビルダ use Illuminate\Support\Facades\DB; // 1つのカラムのデータを取得する場合 DB::table('テーブル名')->select('カラム名')->get(); // 複数のカラムのデータを取得する場合 DB::table('テーブル名')->select('カラム名1', 'カラム名2', 'カラム名3', ......)->get(); // すべてのカラムのデータを取得する場合 DB::table('テーブル名')->get();
INSERT文
SQL --「カラム名1には値1」「カラム名2には値2」のように、それぞれ対応する値が入ったデータが追加される INSERT INTO テーブル名 (カラム名1, カラム名2, カラム名3, ......) VALUES (値1, 値2, 値3, ......); クエリビルダ use Illuminate\Support\Facades\DB; //「カラム名1には値1」「カラム名2には値2」のように、それぞれ対応する値が入ったデータが追加される DB::table('テーブル名')->insert(['カラム名1' => 値1, 'カラム名2' => 値2, 'カラム名3' => 値3, ......]);
UPDATE文
SQL -- 条件式に当てはまるデータを検索し、セットされた値で更新する UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, カラム名3 = 値3, ...... WHERE 条件式; クエリビルダ use Illuminate\Support\Facades\DB; // 条件式(where()メソッドの引数)に当てはまるデータを検索し、セットされた値で更新する DB::table('テーブル名')->where('カラム名', '比較演算子', 値)->update(['カラム名1' => 値1, 'カラム名2' => 値2, 'カラム名3' => 値3, ......]);
DELETE文
SQL -- 条件式に当てはまるデータを検索し、削除する DELETE FROM テーブル名 WHERE 条件式; クエリビルダ use Illuminate\Support\Facades\DB; // 条件式(where()メソッドの引数)に当てはまるデータを検索し、削除する DB::table('テーブル名')->where('カラム名', '比較演算子', 値)->delete();
WHERE句
SQL -- 条件式に当てはまるデータを検索し、取得する SELECT カラム名 FROM テーブル名 WHERE 条件式; -- 条件式に当てはまるデータを検索し、セットされた値で更新する UPDATE テーブル名 SET カラム名1 = 値1, カラム名2 = 値2, カラム名3 = 値3, ...... WHERE 条件式; -- 条件式に当てはまるデータを検索し、削除する DELETE FROM テーブル名 WHERE 条件式; クエリビルダ use Illuminate\Support\Facades\DB; // 条件式(where()メソッドの引数)に当てはまるデータを検索し、取得する DB::table('テーブル名')->where('カラム名', '比較演算子', 値)->get(); // 条件式(where()メソッドの引数)に当てはまるデータを検索し、セットされた値で更新する DB::table('テーブル名')->where('カラム名', '比較演算子', 値)->update(['カラム名1' => 値1, 'カラム名2' => 値2, 'カラム名3' => 値3, ......]); // 条件式(where()メソッドの引数)に当てはまるデータを検索し、削除する DB::table('テーブル名')->where('カラム名', '比較演算子', 値)->delete();
クエリビルダにおける条件式の書き方
クエリビルダのwhere()メソッド - 第1引数:カラム名 - 第2引数:比較演算子 - 第3引数:値
複数の条件式を組み合わせる方法
where()
メソッドやorWhere()
メソッドをつなげることで、「AかつB」「AまたはB」といった演算を実現
LIMIT句
SQL -- 指定した最大件数までのデータを取得する SELECT カラム名 FROM テーブル名 LIMIT 最大件数; クエリビルダ use Illuminate\Support\Facades\DB; // 指定した最大件数までのデータを取得する DB::table('テーブル名')->take(最大件数)->get(); // limit()メソッドもtake()メソッドと同じ動作をする DB::table('テーブル名')->limit(最大件数)->get();
ORDER BY句
SQL -- 特定のカラムを昇順(ASC)または降順(DESC)で並び替え、その順番でデータを取得する SELECT 取得するカラム名 FROM テーブル名 ORDER BY 並び替えるカラム名 並べ方(ASCまたはDESC); クエリビルダ use Illuminate\Support\Facades\DB; // 特定のカラムを昇順(ASC)または降順(DESC)で並び替え、その順番でデータを取得する DB::table('テーブル名')->orderBy('並び替えるカラム名', '並べ方(ascまたはdesc)')->get();
GROUP BY句
SQL -- 指定したカラムでグループ化する SELECT カラム名 FROM テーブル名 GROUP BY カラム名1, カラム名2, ......; クエリビルダ use Illuminate\Support\Facades\DB; // 指定したカラムでグループ化する DB::table('テーブル名')->groupBy('カラム名1', 'カラム名2', ......)->get();
HAVING句
SQL -- グループ化したあとに指定した条件でデータを絞り込む SELECT カラム名 FROM テーブル名 GROUP BY カラム名1, カラム名2, ...... HAVING 条件式; クエリビルダ use Illuminate\Support\Facades\DB; // グループ化したあとに指定した条件(having()メソッドの引数)でデータを絞り込む DB::table('テーブル名')->groupBy('カラム名1', 'カラム名2', ......)->having('カラム名', '比較演算子', 値)->get();
JOIN句
SQL -- 指定した結合条件でテーブル1とテーブル2を内部結合する SELECT カラム名 FROM テーブル名1 INNER JOIN テーブル名2 ON 結合条件; クエリビルダ use Illuminate\Support\Facades\DB; // 指定した結合条件でテーブル1とテーブル2を内部結合する DB::table('テーブル名1')->join('テーブル名2', 'テーブル名1.カラム名1', '比較演算子', 'テーブル名2.カラム名2')->get();
クエリビルダのjoin()メソッドでは、以下のように4つの引数を渡して条件式を作成します。
- 第1引数:結合するテーブル名(テーブル名2)
- 第2引数:紐付けるカラム(テーブル名1.カラム名1)
- 第3引数:比較演算子(『データベースとSQLの基礎を学ぼう』の7章を参照)
- 第4引数:紐付けるカラム(テーブル名2.カラム名2)
LEFT OUTER JOIN(左外部結合)
SQL -- 指定した結合条件でテーブル1とテーブル2を左外部結合する SELECT カラム名 FROM テーブル名1 LEFT OUTER JOIN テーブル名2 ON 結合条件; クエリビルダ use Illuminate\Support\Facades\DB; // 指定した結合条件でテーブル1とテーブル2を左外部結合する DB::table('テーブル名1')->leftJoin('テーブル名2', 'テーブル名1.カラム名1', '比較演算子', 'テーブル名2.カラム名2')->get();
leftJoin()メソッドの引数の指定方法はjoin()メソッドと同じ
RIGHT OUTER JOIN(右外部結合)
SQL -- 指定した結合条件でテーブル1とテーブル2を右外部結合する SELECT カラム名 FROM テーブル名1 RIGHT OUTER JOIN テーブル名2 ON 結合条件; クエリビルダ use Illuminate\Support\Facades\DB; // 指定した結合条件でテーブル1とテーブル2を右外部結合する DB::table('テーブル名1')->rightJoin('テーブル名2', 'テーブル名1.カラム名1', '比較演算子', 'テーブル名2.カラム名2')->get();
rightJoin()メソッドの引数の指定方法はjoin()メソッドと同じ
CROSS JOIN(交差結合)
SQL -- テーブル1とテーブル2を交差結合する SELECT カラム名 FROM テーブル名1 CROSS JOIN テーブル名2; クエリビルダ use Illuminate\Support\Facades\DB; // テーブル1とテーブル2を交差結合する DB::table('テーブル名1')->crossJoin('テーブル名2')->get();