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

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする

コメント