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



- 1. Laravelのモデル
- 2. モデルの役割とは?
- 2.1. データベースとのやり取りを簡単にする
- 2.2. データをオブジェクトとして扱えるようにする
- 3. Laravelのモデルの基本的な使い方
- 3.1. モデルの作成
- 3.2. モデルの基本構造
- 3.3. 主なポイント
- 4. データベースとの連携
- 4.1. テーブル名を指定する場合
- 5. 基本的な操作
- 5.1. レコードの取得
- 5.2. 全てのレコードを取得する
- 5.3. 条件付きで取得する
- 5.4. 主キーで取得する
- 6. モデルの機能詳細
- 6.1. fillableプロパティ
- 6.2. カスタム主キーの指定
- 6.3. リレーション(関係性の定義)
- 6.3.1. 1対多のリレーション
- 6.3.2. 多対多のリレーション
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';


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'];
これにより、title
と content
カラムが挿入で書き込まれることを許可されます。
6.2. カスタム主キーの指定
データベース設計によっては、主キーのカラム名が id
ではない場合があります。その場合、$primaryKey
プロパティをモデルに設定することで対応できます。主キーとして article_id
カラムを指定します。
protected $primaryKey = 'article_id';
6.3. リレーション(関係性の定義)
複数のテーブルが関連する場合、リレーションを定義することで簡単に操作できます。


6.3.1. 1対多のリレーション
public function comments()
{
return $this->hasMany(Comment::class);
}
6.3.2. 多対多のリレーション
public function tags()
{
return $this->belongsToMany(Tag::class);
}