クエリビルダとは
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();