【Laravel】クエリビルダ(Query Builder)の使い方と意味について



1. Laravelのクエリビルダとは?
Laravelのクエリビルダ(Query Builder)は、データベース操作を簡単かつ柔軟に行える機能です。SQLを書くことなく、メソッドチェーン を使用して効率的にデータベースクエリを構築できます。これにより、コードが読みやすく、保守性も向上します。
2. クエリビルダの基本的な使い方
Laravelのクエリビルダは、DB
ファサードを使用してクエリを実行します。以下は、基本的なCRUD(作成、読み取り、更新、削除)の操作例です。


DB::table('users')->get()
でOK。2.1. データの取得
データベースからデータを取得する際には、Laravelのクエリビルダを使用して簡単に操作できます。以下に、さまざまな取得方法を詳しく説明します。
use Illuminate\Support\Facades\DB;
// 全てのレコードを取得する
$users = DB::table('users')->get();
このコードは、users
テーブルから全てのレコードを取得し、その結果を $users
に格納します。結果はコレクションとして返され、ループ処理やデータの操作が容易になります。
// 特定のカラムだけを取得する
$names = DB::table('users')->pluck('name');
pluck
メソッドを使用すると、指定したカラムの値だけを簡単に取得できます。上記の例では、users
テーブルの name
カラムの値をすべて取得し、 $names
に格納します。
// 条件を指定してデータを取得する
$activeUsers = DB::table('users')->where('status', 'active')->get();
where
メソッドを使って条件を指定することで、特定の条件に合致するレコードのみを取得できます。ここでは、status
が 'active'
のユーザーだけを取得しています。
// 最初の1件だけを取得する
$firstUser = DB::table('users')->first();
first
メソッドは、クエリの結果から最初のレコードだけを取得します。
// IDで特定のレコードを取得する
$user = DB::table('users')->find(1);
find
メソッドにIDを渡すと、そのIDに対応するレコードを取得できます。存在しない場合は null
を返します。
2.2. データの挿入
新しいデータをデータベースに挿入するには、insert
メソッドを使用します。
use Illuminate\Support\Facades\DB;
// 新しいユーザーを挿入する
DB::table('users')->insert([
'name' => 'ふゅか',
'email' => 'fuxyuka@example.com',
]);
このコードは、users
テーブルに新しいユーザーを追加します。
// 挿入後に新しいレコードのIDを取得する
$id = DB::table('users')->insertGetId([
'name' => 'ふゅか',
'email' => 'fuxyuka@example.com',
]);
insertGetId
メソッドは、レコードを挿入した後にそのIDを返します。これにより、挿入したレコードをすぐに参照することができます。


insert
でいける。2.3. データの更新
既存のデータを更新するには、update
メソッドを使用します。
use Illuminate\Support\Facades\DB;
// 特定のユーザーのメールアドレスを更新する
DB::table('users')
->where('id', 1)
->update(['email' => 'newemail@example.com']);
この例では、IDが1のユーザーのメールアドレスを 'newemail@example.com'
に更新しています。where
メソッドで条件を指定し、update
メソッドで更新内容を渡します。
// 条件に一致する複数のレコードを一括更新する
DB::table('users')
->where('status', 'inactive')
->update(['status' => 'active']);
ここでは、status
が 'inactive'
のユーザー全員のステータスを 'active'
に変更しています。複数のレコードを一度に更新したい場合に有効です。
2.4. データの削除
レコードを削除するには、delete
メソッドを使用します。
use Illuminate\Support\Facades\DB;
// 特定のユーザーを削除する
DB::table('users')->where('id', 1)->delete();
このコードは、IDが1のユーザーをデータベースから削除します。


delete
を使う。たとえば、特定のユーザーなら、DB::table('users')->where('id', 1)->delete()
。// 全てのレコードを削除する
DB::table('users')->delete();
delete
メソッドをテーブルに対して直接呼び出すと、そのテーブル内の全てのレコードが削除されます。データを完全にリセットしたい場合に使用しますが、注意が必要です。