Eloquent ORMを使用したLaravel 5でのデータベース操作は、非常に効率的で便利な方法です。LaravelのEloquentは、リレーショナルデータベースとやり取りするためのオブジェクトリレーショナルマッピング(ORM)ツールであり、データベースクエリを直感的に記述できるように設計されています。この記事では、Laravel 5でEloquent ORMを使用してデータベース操作を行う方法について詳しく説明します。
Eloquent ORMとは
Eloquent ORMは、PHPのLaravelフレームワークに組み込まれているORMライブラリです。ORMとは、データベースのレコードをPHPオブジェクトにマッピングする技術であり、SQLクエリを直接記述することなくデータベース操作を簡単に行えるようにします。LaravelのEloquentを使用すると、データベース操作をより直感的に、かつ効率的に実行できます。

Eloquentの基本的な設定
Laravelでは、Eloquent ORMはモデルを通じてデータベースと対話します。まずは、基本的なモデルの設定方法から説明します。
モデルの作成
モデルは、Eloquent ORMでデータベースのテーブルを操作するためのクラスです。モデルは、通常、artisan
コマンドを使用して作成します。例えば、Post
というテーブルに対応するモデルを作成するには、以下のコマンドを実行します。
bashphp artisan make:model Post
このコマンドによって、app/Models/Post.php
というファイルが作成されます。モデルは、Eloquentの基本的な機能を使用するために必要な基本的なクラス構造を持っています。
モデルとテーブルの関連付け
Eloquentでは、モデルとテーブルはデフォルトで1対1で関連付けられます。つまり、Post
モデルはposts
テーブルと関連付けられます。もし、テーブル名がモデル名と異なる場合、モデル内でテーブル名を明示的に指定することができます。
例えば、テーブル名がblog_posts
の場合、モデル内で次のように指定します。
phpclass Post extends Model
{
protected $table = 'blog_posts';
}
モデルのプロパティ
Eloquentモデルは、データベースの各カラムをプロパティとして持つオブジェクトです。Laravelは、カラム名と同じ名前のプロパティを持つクラスを作成し、データベース操作を簡単にします。例えば、posts
テーブルにtitle
カラムがある場合、モデルに次のようにアクセスできます。
php$post = Post::find(1);
echo $post->title;
Eloquentでのデータベース操作
レコードの取得
Eloquentでは、データベースからレコードを簡単に取得できます。主な方法として、all()
, find()
, where()
などがあります。
-
すべてのレコードを取得
php$posts = Post::all();
-
IDで特定のレコードを取得
php$post = Post::find(1);
-
条件を指定してレコードを取得
php$posts = Post::where('status', 'published')->get();
新しいレコードの作成
新しいレコードを作成するには、モデルインスタンスを作成し、プロパティに値を設定した後、save()
メソッドを呼び出します。
php$post = new Post();
$post->title = '新しい記事';
$post->content = '記事の内容';
$post->save();
また、create()
メソッドを使用して、より簡単に新しいレコードを作成することもできます。この方法では、$fillable
プロパティをモデルに設定して、どのカラムが一括代入可能かを指定する必要があります。
phpclass Post extends Model
{
protected $fillable = ['title', 'content'];
}
phpPost::create([
'title' => '新しい記事',
'content' => '記事の内容'
]);
レコードの更新
既存のレコードを更新するには、まずそのレコードを取得し、プロパティを変更してからsave()
メソッドを呼び出します。
php$post = Post::find(1);
$post->title = '更新されたタイトル';
$post->save();
また、update()
メソッドを使って一度に複数のカラムを更新することもできます。
phpPost::where('id', 1)->update(['title' => '更新されたタイトル']);
レコードの削除
レコードを削除するには、delete()
メソッドを使用します。
php$post = Post::find(1);
$post->delete();
また、条件を指定して複数のレコードを削除することも可能です。
phpPost::where('status', 'draft')->delete();
リレーションシップの設定
Eloquentでは、テーブル間のリレーションシップも簡単に設定できます。主なリレーションには、hasOne
, hasMany
, belongsTo
, belongsToMany
などがあります。
一対多(hasMany)
Post
モデルが複数のComment
を持つ場合、Post
モデルに次のようにリレーションを定義します。
phpclass Post extends Model
{
public function comments()
{
return $this->hasMany(Comment::class);
}
}
コメントを取得するには、次のようにアクセスします。
php$post = Post::find(1);
$comments = $post->comments;
多対一(belongsTo)
Comment
モデルがPost
に属している場合、Comment
モデルに次のようにリレーションを定義します。
phpclass Comment extends Model
{
public function post()
{
return $this->belongsTo(Post::class);
}
}
コメントから投稿を取得するには、次のようにアクセスします。
php$comment = Comment::find(1);
$post = $comment->post;
多対多(belongsToMany)
User
とRole
の多対多リレーションを定義するには、次のようにbelongsToMany
メソッドを使用します。
phpclass User extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class);
}
}
ユーザーのロールを取得するには、次のようにアクセスします。
php$user = User::find(1);
$roles = $user->roles;
クエリビルダーとEloquentの違い
Eloquentは非常に便利ですが、複雑なクエリやパフォーマンスを重視する場合には、クエリビルダーを使うことがあります。クエリビルダーでは、SQLに近い形式でデータベース操作を行いますが、Eloquentと同じくデータベースの安全性を保つことができます。
php$posts = DB::table('posts')->where('status', 'published')->get();
まとめ
Laravel 5のEloquent ORMは、データベース操作を簡潔かつ効率的に行うための強力なツールです。モデルを使用して、データベースのレコードを簡単に操作でき、リレーションシップを利用してテーブル間の関連付けも簡単に実現できます。Eloquentを活用することで、Laravelでの開発がさらにスムーズで直感的になるでしょう。