Laravel 5.3 Eloquent ORM 入門 1 (モデルの作成)

PHP の Web フレームワーク Laravel で ORM (Object-Relational Mapping) をつかさどるのが Eloquent です。

これはなかなかできのよい ORM で、慣れれば大抵のことが直感的に実装できます。今回は Laravel 5.3 における Eloquent の使い方を紹介します。

詳細な情報は 公式ページ Eloquent: Getting Started - Laravel を参照してください。

概要

Eloquent を使う上で重要なファイル構成は下記の通りです。カッコ内はファイル名の標準的な規則です。

  • app/ 下のモデルファイル

(先頭大文字で 単数形 例. Hoge)

  • database/migrations 下のマイグレーションファイル

(すべて小文字で yyyy_mm_dd_hhmmss_abcdefgのような感じ)

  • database/seeds 下のシードファイル

(複数形 + TableSeeder 例. HogesTableSeeder)

ほとんどのケースでモデルファイルとマイグレーションファイルは必要だと思いますが、シーディング(初期データの投入)を行わない場合シードファイルは不要です。

今回はモデルファイルとマイグレーションファイルの作成までを行います。

モデルとマイグレーションの作成

artisan コマンドで生成

artisan コマンドでモデルのスケルトンが生成できます。

-m (--migration) オプションを付加しておくと、実行時点のタイムスタンプがついたマイグレーションファイルも生成してくれます。

このとき前述の通り モデルは先頭大文字の単数形 にしておきましょう。

php artisan make:model Hoge -m

これで下記のような app/Hoge.php が生成されるはずです。

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Hoge extends Model
{
}

基本的にはこれでモデルの作成は完了です。

Laravel のモデルは特に属性などを追加する必要がなければ、このように空の状態で問題なく動作します。

モデルファイル

テーブル名

Eloquent の標準的な規則では、テーブル名はモデル名をスネークケースにして、複数形にしたものです。たとえば RottenApple モデルであれば、 rotten_apples がデフォルトのテーブル名になります。

もし、この規則がデータベース側のテーブル名とそぐわないようなら、 $table 変数を宣言すれば対応できます。

protected $table = 't_rotten_apple';

タイムスタンプ列

もう1点、注意したいのは Eloquent のモデルは特に指定しなければ created_atupdated_at という 2 つのタイムスタンプ属性が定義される ということです。

つまり、データベースのテーブルにもこの2つのタイムスタンプ列が追加されます。もしこれが不要、あるいはすでにテーブルが存在する場合などは下記のように $timestampsfalse を設定しておく必要があります。

public $timestamps = false;

マイグレーションファイル

この部分は長くなるので、次回ご紹介します。

kenzauros