09クエリビルダー
クエリビルダとは?
クエリビルダは、Laravelが用意しているデータベース操作用のツールです。SQL(Structured Query Language)を直接書く代わりに、PHPコードでクエリ(データベースへの指示)を作成できます。
Laravelのクエリビルダーは、生のSQLクエリを直接記述することなくデータベースを操作することができます。
DBファサードを使用するためのuse文を追加することで追加ファイル内で使用可能になります。
// ファイル上部に追加する
use Illuminate\Support\Facades\DB;では実際にクエリビルダの使い方について学んでいきましょう!
すべてのレコードを取得
// DBファサードを使用
$users = DB::table('users')->get();
// すべての列ではなく、特定の列のみ取得
$names = DB::table('users')->pluck('name');
// 最初の1件を取得
$user = DB::table('users')->first();DB::table(‘users’)->get();と書くと、SQLの「SELECT * FROM users」と同じ意味になります。
生のSQLを書かなくていいため、SQLインジェクションなどのセキュリティリスクを軽減することができます。
それでは他の例も見てみましょう。
条件検索
// 単一条件
$filtered_users = DB::table('users')
->where('age', '>', 25)
->where('city', 'Tokyo')
->get();
// OR条件
$users = DB::table('users')
->where('age', '>', 30)
->orWhere('is_admin', true)
->get();where()を用いることでSQLの「WHERE文」の意味になります。
SQL文の場合はWHEREが複数つなげる場合、2つ目以降をANDにしていましたが、クエリビルダではANDではなくwhere()で複数個つなげることが可能です。
また、->where(‘city’, ‘Tokyo’)は->where(‘city’, ‘=’, ‘Tokyo’)と同じ意味で、「=」の場合は省略することが可能です。
複雑な条件
// ネストされたWhere条件
$users = DB::table('users')
->where('active', true)
->where(function($query) {
$query->where('age', '>', 25)
->orWhere('is_vip', true);
})
->get();
// Between条件
$users = DB::table('users')
->whereBetween('age', [20, 30])
->get();
// In条件
$users = DB::table('users')
->whereIn('id', [1, 2, 3])
->get();ソートと制限
// 並び替え
$sorted_users = DB::table('users')
->orderBy('created_at', 'desc')
->get();
// 件数制限
$limited_users = DB::table('users')
->limit(10)
->get();テーブル結合
// 内部結合
$result = DB::table('users')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.name', 'orders.amount')
->get();
// 左外部結合
$result = DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();JOINやLEFTJOINなどもクエリビルダで記述することが可能です。
->join(‘結合先テーブル’, ‘結合元カラム’, ‘結合条件’, ‘結合先カラム’)にすることでJOINすることが可能です。
データ更新
// 条件に合致するレコードを更新
DB::table('users')
->where('id', 1)
->update(['name' => '山田 太郎']);SELECT以外にも更新や削除も可能です。
末尾に->update()を記述することでSQL文のUPDATEと同じ意味になります。
update()の引数には「’カラム名’ => ‘更新内容’」となるように配列を指定します。
複数カラム更新対象がある場合は、配列を複数に設定すると一括で更新が可能です。
DB::table('users')
->where('id', 1)
->update([
'name' => '山田 太郎',
'age' => 20,
'tel' => '090-0000-0000',
]);データ削除
// 条件に合致するレコードを削除
DB::table('users')
->where('active', false)
->delete();
コメントを残す