【Laravel】モデルの使い方と意味について
Laravelのモデル
Laravelにおいて「モデル」とは、アプリケーション内のデータとそのデータに関連する操作を扱うための仕組みの一つです。具体的には、データベースとやり取りするための橋渡し役を担っています。この記事では、Laravel10を使いながら、モデルについて、具体例を交えながら解説します。
モデルの役割とは?
モデルは、MVCアーキテクチャ(Model-View-Controller)の「M」に該当します。
データベースとのやり取りを簡単にする
モデルを使うことで、データベースからのデータ取得、保存、更新、削除といった操作が簡単になります。
データをオブジェクトとして扱えるようにする
データベースの行や列(レコードやフィールド)を、コード内でクラスやプロパティとして操作できます。
Laravelのモデルの基本的な使い方
モデルの作成
Laravelでは、モデルは artisan コマンドを使って簡単に作成できます。
php artisan make:model Article
上記のコマンドを実行すると、app/Models ディレクトリに Article.php というモデルファイルが生成されます。
モデルの基本構造
作成されたモデルファイルを開くと、以下のようなシンプルな構造になっています。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
use HasFactory;
}
主なポイント
- 名前空間(namespace): モデルの場所を示します。
HasFactory: テスト用のデータを生成する「ファクトリ機能」を利用するためのものです。extends Model:この部分でEloquentというORM(オブジェクト関係マッピング)を継承しています。
データベースとの連携
モデルは通常、特定のデータベーステーブルと関連付けられます。例えば、上記の Article モデルは、自動的に articles というテーブルと連携します。これは、Laravelがモデル名を複数形に変換してテーブル名を推測する仕組みがあるためです。
テーブル名を指定する場合
もし、推測されたテーブル名を変更したい場合は、モデル内で $table プロパティを使って指定します。
protected $table = 'custom_table_name';
基本的な操作
レコードの取得
モデルを使ってデータベースからレコードを取得するのは簡単です。
全てのレコードを取得する
$articles = Article::all();
条件付きで取得する
$article = Article::where('id', 1)->first();
主キーで取得する
$article = Article::find(1);
モデルの機能詳細
fillableプロパティ
Laravelでは、セキュリティ上の理由から、データ挿入時に許可するカラムを指定する必要があります。これをfillableプロパティで設定します。
protected $fillable = ['title', 'content'];
これにより、title と content カラムが挿入で書き込まれることを許可されます。
カスタム主キーの指定
データベース設計によっては、主キーのカラム名が id ではない場合があります。その場合、$primaryKey プロパティをモデルに設定することで対応できます。主キーとして article_id カラムを指定します。
protected $primaryKey = 'article_id';
リレーション(関係性の定義)
複数のテーブルが関連する場合、リレーションを定義することで簡単に操作できます。
1対多のリレーション
public function comments()
{
return $this->hasMany(Comment::class);
}
多対多のリレーション
public function tags()
{
return $this->belongsToMany(Tag::class);
}
