Eloquent ORMは、Laravelフレームワークの一部として提供される強力なオブジェクトリレーショナルマッピング(ORM)ツールであり、データベースとのやり取りを非常に直感的で効率的に行うことができます。この記事では、Eloquent ORMの基本的な原則とその使い方について詳しく説明します。
1. Eloquent ORMとは?
Eloquent ORMは、PHPのオブジェクト指向プログラミングとSQLのリレーショナルデータベースを統合するツールです。これにより、データベース操作がオブジェクト指向の方法で行えるようになり、データベースとのやり取りがより簡単で分かりやすくなります。Eloquentでは、各テーブルが「モデル」として対応し、モデルを使ってデータを操作します。

例えば、users
というテーブルがある場合、User
というクラスがそのテーブルに対応し、Eloquentモデルを使うことで、SQLクエリを手動で書かずにデータの取得や保存、更新、削除が行えるようになります。
2. モデルの作成
Eloquentの使用を始めるには、まずモデルを作成する必要があります。モデルは、データベースのテーブルと対応し、そのテーブルのレコードを操作するためのクラスです。Laravelでは、以下のコマンドでモデルを簡単に作成できます。
bashphp artisan make:model User
上記のコマンドで、User
モデルが作成されます。このモデルは、デフォルトでusers
というテーブルと対応します。Eloquentは、モデル名を複数形にして、テーブル名を推測します。つまり、User
モデルは、users
テーブルに対応します。
3. データの取得
データベースからデータを取得するには、Eloquentを使って非常に簡単にクエリを実行できます。基本的なデータ取得の方法は以下の通りです。
-
全データを取得
php$users = User::all();
-
条件を指定してデータを取得
php$user = User::where('age', '>', 18)->get();
-
最初の1件を取得
php$user = User::first();
Eloquentのクエリビルダーを使用することで、SQL文を直接書かずに、直感的にデータを取得できます。
4. データの挿入
Eloquentでは、データを簡単に挿入することができます。新しいレコードを作成する方法は以下の通りです。
-
新しいユーザーの作成
save()
メソッドを呼び出すことで、データベースに新しいレコードを挿入します。また、create()
メソッドを使って、より簡単に挿入することもできます。
create()
を使うためには、モデルに$fillable
プロパティを設定しておく必要があります。これは、マスアサインメント(大量代入)を防ぐためです。
phpclass User extends Model
{
protected $fillable = ['name', 'email'];
}
5. データの更新
データの更新は非常にシンプルです。update()
メソッドを使用することで、指定したカラムの値を更新できます。
php$user = User::find(1); // IDが1のユーザーを取得
$user->name = '田中太郎';
$user->save(); // 更新を保存
また、update()
メソッドを使って、複数のカラムを一度に更新することもできます。
6. データの削除
データの削除も簡単に行えます。delete()
メソッドを使って、レコードを削除します。
php$user = User::find(1);
$user->delete();
条件を指定して削除することも可能です。
phpUser::where('age', '<', 18)->delete();
7. リレーションシップの定義
Eloquentでは、テーブル間のリレーションシップを簡単に定義できます。リレーションシップには、主に以下の種類があります。
-
1対多(One to Many)
例えば、1人のユーザーが複数の記事を持っている場合、User
モデルとPost
モデルの間に1対多のリレーションを定義します。
php// Userモデル
public function posts()
{
return $this->hasMany(Post::class);
}
// Postモデル
public function user()
{
return $this->belongsTo(User::class);
}
-
多対多(Many to Many)
例えば、ユーザーが複数のロールを持ち、ロールが複数のユーザーに関連している場合、多対多のリレーションを定義します。
php// Userモデル
public function roles()
{
return $this->belongsToMany(Role::class);
}
// Roleモデル
public function users()
{
return $this->belongsToMany(User::class);
}
-
1対1(One to One)
例えば、1人のユーザーが1つのプロフィールを持っている場合、1対1のリレーションを定義します。
php// Userモデル
public function profile()
{
return $this->hasOne(Profile::class);
}
8. Eloquentの特徴的なメソッド
Eloquentには、データベース操作をさらに便利にするための多くのメソッドがあります。代表的なメソッドとして以下が挙げられます。
-
find(): 主キーでレコードを取得
php$user = User::find(1);
-
pluck(): 特定のカラムの値を取得
php$names = User::pluck('name');
-
count(): 条件に合致するレコードの数を取得
php$count = User::where('age', '>', 18)->count();
-
sum(): 合計を取得
php$total = Order::sum('amount');
-
max() / min(): 最大値/最小値を取得
php$maxAmount = Order::max('amount');
9. トランザクション
Eloquentでは、トランザクションを使ってデータベース操作を安全に行うことができます。トランザクションは、複数の操作を1つのまとまりとして実行し、そのいずれかでエラーが発生した場合にロールバックする仕組みです。
phpuse Illuminate\Support\Facades\DB;
DB::beginTransaction();
try {
// データベース操作
$user = User::create(['name' => '佐藤太郎']);
$profile = Profile::create(['user_id' => $user->id, 'bio' => '自己紹介']);
DB::commit(); // コミット
} catch (\Exception $e) {
DB::rollBack(); // ロールバック
}
結論
Eloquent ORMは、Laravelフレームワークを使用する際に非常に強力で便利なツールです。データベース操作を簡潔に記述できるだけでなく、リレーションシップやトランザクションなどの高度な機能もサポートしています。これにより、開発者はSQLの複雑さを意識することなく、効率的にデータベース操作を行うことができます。Eloquent ORMを使いこなすことで、より効率的でメンテナブルなアプリケーションの開発が可能になります。