Laravel クエリビルダ

クエリビルダとは

SQLのクエリ(テータベースに対する問い合わせ、命令文)を簡単に作成・実行できるLaravelの機能

-- SQL文
SELECT * FROM products;

// クエリビルダ
DB::table('products')->get();

クエリビルダの書き方

すべてのクエリビルダに共通

  1. use Illuminate\Support\Facades\DB;を記述してDBファサードのuse宣言を行う
  2. 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();