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_at と updated_at という 2 つのタイムスタンプ属性が定義される ということです。
つまり、データベースのテーブルにもこの2つのタイムスタンプ列が追加されます。もしこれが不要、あるいはすでにテーブルが存在する場合などは下記のように $timestamps に false を設定しておく必要があります。
public $timestamps = false;マイグレーションファイル
この部分は長くなるので、次回ご紹介します。




