【Laravel】Eloquent ORMの使い方と意味について



1. Eloquent ORMの使い方
Eloquent ORM(Object-Relational Mapping)は、Laravelが提供するデータベース操作のためのツールです。SQLを直接記述する必要がなく、オブジェクト指向プログラミングのスタイルでデータベース操作を行えます。この記事では、Eloquent ORMの基本的な使い方と、実際のコード例を交えた解説を行います。
2. 基本的な使い方
Laravelのモデルを使用してデータベース操作を行う方法を詳しく解説します。データの取得から作成、更新、削除までの基本的な操作を例を交えて説明します。
2.1. モデルの作成
データベースの操作を行うために、以下のコマンドでモデルを作成します。
php artisan make:model Post
このコマンドでapp/Models/Post.php
というファイルが生成されます。
2.2. データの取得
データベースからデータを取得するには、以下のような方法があります。それぞれのケースに応じて使い分けてください。
2.2.1. すべてのデータを取得する方法
データベースの特定のテーブルに保存されているすべてのデータを取得するには、all
メソッドを使用します。
use App\Models\Post;
// すべてのデータを取得
$posts = Post::all();
2.2.2. 特定のIDのデータを取得する方法
特定のIDに紐づくデータを取得するには、find
メソッドを使います。
$post = Post::find(1);
2.2.3. 条件に一致するデータを取得する方法
条件に基づいてデータを絞り込むには、where
メソッドを使用します。以下は、「status」が「published」のデータを取得する例です。
$publishedPosts = Post::where('status', 'published')->get();
2.3. データの取得
新しいデータを作成する方法には、いくつかのアプローチがあります。
2.3.1. 新しいインスタンスを使った方法
まず、モデルのインスタンスを作成し、それに必要な値を設定して保存します。
use App\Models\Post;
$post = new Post();
$post->title = '新しい記事';
$post->content = '記事の内容';
$post->status = 'draft';
$post->save();
2.3.2. createメソッドを使った方法
create
メソッドを使用すると、一行でデータを保存できます。この方法では、あらかじめモデルで$fillable
プロパティまたは$guarded
プロパティを設定する必要があります。
Post::create([
'title' => '新しい記事',
'content' => '記事の内容',
'status' => 'draft'
]);
create
メソッドを使用するには、モデル内で以下のように$fillable
プロパティに許可するカラムを明示的に指定しておく必要があります。これにより、セキュリティを強化し、不正なデータの挿入を防ぎます。
protected $fillable = ['title', 'content', 'status'];

new
ならインスタンス作成、create
なら一行で完了。fillable
の設定を忘れちゃダメよ!2.4. データの更新
既存のデータを更新するには、次の方法があります。
2.4.1. インスタンスを使った更新
まず、特定のデータを取得し、変更したいプロパティを設定した後にsave
メソッドを呼び出します。
$post = Post::find(1);
$post->status = 'published';
$post->save();
2.4.2. updateを使った更新
複数のデータを一括で更新する場合は、update
メソッドを使用するのが便利です。以下は、「status」が「draft」のデータをすべて「published」に変更する例です。
Post::where('status', 'draft')->update(['status' => 'published']);
2.5. データの削除
不要なデータを削除するには、delete
メソッドを使用します。
2.5.1. 特定のデータを削除
特定のデータを削除する場合、まずそのデータを取得し、delete
メソッドを呼び出します。
$post = Post::find(1);
$post->delete();
2.5.2. 複数のデータを削除
条件に一致するデータをまとめて削除することも可能です。以下は、「status」が「draft」のデータをすべて削除する例です。
Post::where('status', 'draft')->delete();