Laravelでのデータベース操作の基本: Eloquent ORMとクエリビルダーの使い方

基本文法・構文ガイド

LaravelはPHPのフレームワークとして非常に人気があり、多くの開発者にとってデータベース操作は日常的な作業です。Laravelには主に二つの方法でデータベースにアクセスするためのツールがあります。それがEloquent ORM(Object-Relational Mapping)とクエリビルダーです。今回はこれら二つのツールを中心に、Laravelでのデータベース操作の基本について解説します。

Eloquent ORMとは?

EloquentはLaravelが提供するORMで、データベースレコードとPHPオブジェクトをスムーズに連携させることができます。Eloquentを使うと、データベースのテーブルごとにモデルを作成し、そのモデルを通じてデータベース操作を行うことが可能です。このアプローチにより、コードがより直感的になり、データ操作が自然な形で記述できます。

Eloquentの基本的な使い方

Eloquentを使用するためには、最初にデータベースのテーブルに対応するモデルを作成します。例えば、「users」テーブルのためのユーザーモデルは以下のように作成します。

php artisan make:model User

このコマンドを実行すると、app/Models/User.phpというファイルが生成されます。ここでEloquent ModelとしてUserクラスを定義します。

レコードの取得

Eloquentではすべてのレコードを取得するためにallメソッドを利用します。

$users = User::all();

一つのレコードを取得したい場合はfindwhereメソッドを使用します。

$user = User::find(1);
$user = User::where('email', 'example@example.com')->first();

レコードの作成

新しいレコードを作成するには、モデルインスタンスを生成し、saveメソッドを呼び出します。

$user = new User;
$user->name = 'John Doe';
$user->email = 'johndoe@example.com';
$user->save();

createメソッドを使用して一度にレコードを作成することも可能です。ただし、$fillableまたは$guardedプロパティによる属性制約を考慮する必要があります。

User::create([
    'name' => 'John Doe',
    'email' => 'johndoe@example.com'
]);

レコードの更新

更新が必要な場合は、取得したインスタンスに対して属性を変更し、saveメソッドを再度呼び出します。

$user = User::find(1);
$user->email = 'newemail@example.com';
$user->save();

レコードの削除

削除するには、取得したインスタンスに対してdeleteメソッドを呼び出します。

$user = User::find(1);
$user->delete();

複数のレコードを一度に削除する場合は、destroyメソッドを利用します。

User::destroy([1, 2, 3]);

クエリビルダーとは?

クエリビルダーは、データベースに対する疎な接続を提供するフレキシブルな機能であり、生のSQLクエリではなく、メソッドチェーン形式で多様なデータ操作を可能にします。データベースの特定のテーブルに依存せずに、条件に基づいたクエリを形成できます。

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

クエリビルダーを使用するには、DBファサードを利用します。

レコードの取得

例えば、全レコードを取得する場合:

$users = DB::table('users')->get();

一部のレコードを取得したい場合:

$user = DB::table('users')->where('email', 'example@example.com')->first();

レコードの挿入

新しいレコードを挿入するには、insertメソッドを使用します。

DB::table('users')->insert([
    'name' => 'Jane Doe',
    'email' => 'janedoe@example.com'
]);

レコードの更新

既存のレコードを更新するには、updateメソッドを利用します。

DB::table('users')->where('id', 1)->update([
    'email' => 'newemail@example.com'
]);

レコードの削除

レコードを削除するには、deleteメソッドを使用します。

DB::table('users')->where('id', 1)->delete();

Eloquentとクエリビルダーの使い分け

Eloquentは、リレーションシップなどの高度なデータ操作を容易にするために設計されており、モデルレベルでのデータ操作が必要な場合には非常に有効です。一方で、クエリビルダーはデータ量が多い場合やテーブル結合など、効率的なクエリが必要な場面でパフォーマンスを向上させることができます。

場面に応じてEloquentとクエリビルダーを選択することで、Laravelでのデータベース操作を最大限に活用することができます。業務の要件に応じて、最適なツールを選び、開発の効率化を図ってください。

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする

コメント