Laravelモデル入門:基本操作からEloquentの活用まで徹底解説

Laravel入門

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開発におけるデータベース操作の幅が大きく広がるでしょう。

長野県・北アルプス地方在住のフリーランスWebプログラマー。
「落ち着くためのWeb開発」をテーマに、訪れる人が安心して使えるサービスづくりを心がけています。

LaravelやWordPressなどのWebアプリケーション開発を得意とし、技術面の安定性はもちろん、運用後も長く活用できる設計を大切にしています。
静かな山間の暮らしから生まれる視点で、シンプルかつ本質的な解決策をご提案します。

野鳥観察も趣味のひとつで、特にミソサザイ(Wren)に魅力を感じています。
小さな体に反して力強く上向きの尾羽、そして澄んだ鳴き声が遠くまで響く姿に、静かな存在感と芯の強さを感じます。
このサイト名「Laravel Wren」には、そんなミソサザイのように、小さくても確かな価値を届けたいという想いを込めています。

信頼できるパートナーとして、そして気軽に相談できる存在として、あなたのWebプロジェクトをサポートします。

Yudai Tsuyuzakiをフォローする

コメント