更新:2024/12/02

【Laravel】モデルの使い方と意味について

はるか
はるか
モデル…Laravelの核部分。データベースの管理がすごく楽になる。
ふゅか
ふゅか
MVCの「M」だからね!例えばデータを保存したり、更新したりするのもコードも少しで書けちゃう!

1. Laravelのモデル

Laravelにおいて「モデル」とは、アプリケーション内のデータとそのデータに関連する操作を扱うための仕組みの一つです。具体的には、データベースとやり取りするための橋渡し役を担っています。この記事では、Laravel10を使いながら、モデルについて、具体例を交えながら解説します。

2. モデルの役割とは?

モデルは、MVCアーキテクチャ(Model-View-Controller)の「M」に該当します。

2.1. データベースとのやり取りを簡単にする

モデルを使うことで、データベースからのデータ取得、保存、更新、削除といった操作が簡単になります。

2.2. データをオブジェクトとして扱えるようにする

データベースの行や列(レコードやフィールド)を、コード内でクラスやプロパティとして操作できます。

3. Laravelのモデルの基本的な使い方

3.1. モデルの作成

Laravelでは、モデルは artisan コマンドを使って簡単に作成できます。

php artisan make:model Article

上記のコマンドを実行すると、app/Models ディレクトリに Article.php というモデルファイルが生成されます。

3.2. モデルの基本構造

作成されたモデルファイルを開くと、以下のようなシンプルな構造になっています。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    use HasFactory;
}

3.3. 主なポイント

  • 名前空間(namespace): モデルの場所を示します。
  • HasFactory テスト用のデータを生成する「ファクトリ機能」を利用するためのものです。
  • extends Model: この部分で Eloquent というORM(オブジェクト関係マッピング)を継承しています。

4. データベースとの連携

モデルは通常、特定のデータベーステーブルと関連付けられます。例えば、上記の Article モデルは、自動的に articles というテーブルと連携します。これは、Laravelがモデル名を複数形に変換してテーブル名を推測する仕組みがあるためです。

4.1. テーブル名を指定する場合

もし、推測されたテーブル名を変更したい場合は、モデル内で $table プロパティを使って指定します。

protected $table = 'custom_table_name';
ふゅか
ふゅか
データベースのテーブル名が自動で推測されるって知ってた?例えば「Article」モデルを作ったら、テーブル名は「articles」になるの!
はるか
はるか
けど、必要ならカスタマイズもできる。$tableで。

5. 基本的な操作

5.1. レコードの取得

モデルを使ってデータベースからレコードを取得するのは簡単です。

5.2. 全てのレコードを取得する

$articles = Article::all();

5.3. 条件付きで取得する

$article = Article::where('id', 1)->first();

5.4. 主キーで取得する

$article = Article::find(1);

6. モデルの機能詳細

6.1. fillableプロパティ

Laravelでは、セキュリティ上の理由から、データ挿入時に許可するカラムを指定する必要があります。これをfillableプロパティで設定します。

protected $fillable = ['title', 'content'];

これにより、titlecontent カラムが挿入で書き込まれることを許可されます。

6.2. カスタム主キーの指定

データベース設計によっては、主キーのカラム名が id ではない場合があります。その場合、$primaryKey プロパティをモデルに設定することで対応できます。主キーとして article_id カラムを指定します。

protected $primaryKey = 'article_id';

6.3. リレーション(関係性の定義)

複数のテーブルが関連する場合、リレーションを定義することで簡単に操作できます。

ふゅか
ふゅか
気に入りそうなポイントはやっぱり「リレーション」かな?テーブル同士の関係をコードでスッキリ表現できるのよ!
はるか
はるか
確かに。1対多とか多対多とか、表現が簡潔。柔軟。

6.3.1. 1対多のリレーション

public function comments()
{
    return $this->hasMany(Comment::class);
}

6.3.2. 多対多のリレーション

public function tags()
{
    return $this->belongsToMany(Tag::class);
}
PR