更新:2024/12/03

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

はるか
はるか
Laravelのクエリビルダ、知ってる?
ふゅか
ふゅか
もちろん!データベース操作を簡単にする機能だよね!メソッドを続けて書くことができるから直感的だよね!

1. Laravelのクエリビルダとは?

Laravelのクエリビルダ(Query Builder)は、データベース操作を簡単かつ柔軟に行える機能です。SQLを書くことなく、メソッドチェーン を使用して効率的にデータベースクエリを構築できます。これにより、コードが読みやすく、保守性も向上します。

2. クエリビルダの基本的な使い方

Laravelのクエリビルダは、DBファサードを使用してクエリを実行します。以下は、基本的なCRUD(作成、読み取り、更新、削除)の操作例です。

ふゅか
ふゅか
基本的な使い方ってどんな感じ?ふゅか、教えて!
はるか
はるか
たとえば、usersテーブルのデータを全部取るなら、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 メソッドをテーブルに対して直接呼び出すと、そのテーブル内の全てのレコードが削除されます。データを完全にリセットしたい場合に使用しますが、注意が必要です。

PR