LaravelはPHPフレームワークの中でも圧倒的な支持を集めており、開発の効率性と柔軟性が非常に高いことで知られています。Laravelを使いこなす上で重要な要素の一つが、データベース操作を行うための「モデル」です。この記事では、Laravelのモデルを用いた基本操作から、高度なEloquent ORMの活用までを徹底的に解説していきます。
Laravelモデルの基本
モデルとは何か?
Laravelにおけるモデルとは、データベーステーブルと対応するPHPオブジェクトで、テーブルの操作(CRUD操作)を簡潔に表現するためのものです。通常、LaravelではモデルはEloquentを介して使用されます。EloquentはLaravelにデフォルトで含まれているORM(Object-Relational Mapping)システムで、データベース操作を簡潔かつ効率的に行うことができます。
モデルの作成
モデルはArtisanコマンドを使って簡単に作成できます。
php artisan make:model Product
このコマンドにより、app/Models
ディレクトリにProduct.php
というモデルファイルが生成されます。ここには、データベーステーブルとのマッピングや、それに関連するロジックを記述することができます。
テーブルとの紐付け
Laravelはデフォルトでモデル名の複数形をテーブル名として認識します。例えば、Product
モデルはproducts
テーブルに紐づけられます。しかし、異なるテーブル名を使用する場合は、モデルファイルに以下のようにテーブル名を指定します。
protected $table = 'my_custom_table_name';
Eloquentによる基本的な操作
データの取得
Eloquentは、データベースからデータを取得するための直感的なAPIを提供します。
$products = Product::all();
これは、products
テーブルにあるすべてのレコードを取得するコードです。条件を付けて取得することも可能です。
$products = Product::where('price', '>', 100)->get();
データの挿入
新しいレコードを追加するには、新しいモデルインスタンスを作成し、それを保存します。
$product = new Product();
$product->name = 'New Product';
$product->price = 100;
$product->save();
または、create
メソッドを使って一度にデータを作成することもできます。
Product::create([
'name' => 'Another Product',
'price' => 150,
]);
fillable
プロパティに挿入可能なフィールドを指定しておく必要があります。
protected $fillable = ['name', 'price'];
データの更新
既存のレコードを更新するには、まずそのレコードを取得し、値を変更してから保存します。
$product = Product::find(1);
$product->price = 200;
$product->save();
データの削除
レコードを削除するには、delete
メソッドを使用します。
$product = Product::find(1);
$product->delete();
Eloquentの便利な機能
リレーションの定義
Eloquentを使用すると、テーブル間のリレーションを簡単に定義し操作することができます。例えば、一つの製品が複数のレビューを持つ場合(1対多のリレーション)、以下のようにモデルに定義します。
public function reviews()
{
return $this->hasMany(Review::class);
}
これにより、製品のレビューに簡単にアクセスできます。
$product = Product::find(1);
$reviews = $product->reviews;
クエリスコープ
特定の条件を繰り返し使用する場合、クエリスコープを利用すると便利です。
public function scopeExpensive($query)
{
return $query->where('price', '>', 100);
}
このスコープを使用することで、条件付きのデータ取得が簡潔になります。
$expensiveProducts = Product::expensive()->get();
ソフトデリート
Laravelはソフトデリートをサポートしており、データを物理的には削除せず、後で復元可能にします。まず、モデルにソフトデリートのトレイトを追加します。
use Illuminate\Database\Eloquent\SoftDeletes;
class Product extends Model
{
use SoftDeletes;
}
テーブルのマイグレーションにdeleted_at
カラムを追加すれば、delete
メソッドはこのカラムに日時を記録することでソフトデリートを実現します。
Eloquentとクエリビルダの違い
Eloquentは初心者にとって非常に使いやすいですが、クエリが複雑になりすぎる場合はクエリビルダの利用を検討した方が良い場合もあります。クエリビルダは、より複雑なクエリやデータ操作を直接SQLに近い形で構築できるため、高度な最適化が必要な場合に有用です。
$users = DB::table('users')->where('votes', '>', 100)->get();
まとめ
LaravelのEloquentは、モデルを通じてデータベース操作をシンプルにし、開発の生産性を大いに向上させてくれる強力なツールです。基本的なCRUD操作から、リレーションの管理、スコープの利用、そしてソフトデリートまで、Eloquentの機能を活用することで、Laravelアプリケーションのデータ操作をより効率的かつ直感的に行うことができます。これらをマスターすることで、Laravel開発におけるデータベース操作の幅が大きく広がるでしょう。
コメント