初めてのLaravel 5.1 : (9) モデルの作成

前回は、マイグレーションを使って、Articlesテーブルを作成しました。今回はMVCパターンのモデルを作成し、モデルを通して、DBのデータを操作を行います。

なお、LaravelではDBとモデルオブジェクトを対応付ける機能を Eloquent と名付けています。Eloquent の機能を継承し、ビジネスロジックを加えたクラスがモデルです。


モデルの作成

artisan を使ってモデルを作成します。
テーブル名は複数形(Articles)で命名しましたが、モデル名は単数形(Article)で命名するのが慣例となっています。ご注意を。

php artisan make:model Article

モデルファイルは app ディレクトリの直下に作成されます。

app
└── Article.php
<?php namespace App;
// app/Article.php

use Illuminate\Database\Eloquent\Model;

class Article extends Model {
	//
}

EloquentのModelを継承しているだけで、中身が空っぽのクラスが作成されました。なんだか不思議ですが、これだけでArticlesテーブルを操作することが出来ます。


Articlesテーブルのスキーマの復習

モデルの操作を行っていく前に、前回作成した Articlesテーブルのスキーマを復習しておきます。

CREATE TABLE "articles" (
    "id" integer not null primary key autoincrement,
    "title" varchar not null,
    "body" text not null,
    "published_at" datetime null,
    "created_at" datetime not null,
    "updated_at" datetime not null
);

id はデータベースによって自動採番されるようになっています。
created_at, updated_at はタイムスタンプと呼ばれ、Eloquent が自動でセットしてくれます。
title, body, published_at はユーザによって設定される項目になります。


モデルの操作

tinker を使って、Articleモデルを操作してみます。
tinker は Laravel アプリケーションと対話的にやりとりする為のツールです。ちょっと動きを試したいとき等に大変便利です。

では、tinker を実行します。

php artisan tinker

ここ以下は tinker上での操作と思って下さい。

Articleの作成と保存

>>> $article = new App\Article();
=>  {}
>>> 
>>> $article->toArray();
=> []
>>> 
>>> $article->title = 'はじめてのタイトル';
=> "はじめてのタイトル"
>>> 
>>> $article->body = 'かくかくしかじか';
=> "かくかくしかじか"
>>> 
>>> $article->published_at = Carbon\Carbon::now();
=>  {
       date: "2015-06-18 07:36:28.000000",
       timezone_type: 3,
       timezone: "UTC"
   }
>>> 
>>> $article->toArray();
=> [
       "title"        => "はじめてのタイトル",
       "body"         => "かくかくしかじか",
       "published_at" =>  {
           date: "2015-06-18 07:36:28.000000",
           timezone_type: 3,
           timezone: "UTC"
       }
   ]
>>> 
>>> $article->save();
=> true
>>> 
  • Articleクラスをnewすることで、メモリー上に新規のArticleインスタンスを作成。
  • title, body, published_at に値をセット。
  • published_at にCarbonクラスで取得した現在時刻をセット。
  • save() で DBにデータを保存。

Articleクラスにはメンバ変数やアクセサメソッド(geter, setter)が定義されていないのに、値をセットすることが出来ました。実は、Eloquentでは、PHPのマジックメソッド__set()を使ってテーブルの項目に対応するメンバー変数へのアクセスを可能にしています。

Articleを全件表示

>>> App\Article::all()->toArray()
=> [
       [
           "id"           => "1",
           "title"        => "はじめてのタイトル",
           "body"         => "かくかくしかじか",
           "created_at"   => "2015-06-18 07:36:58",
           "updated_at"   => "2015-06-18 07:36:58",
           "published_at" => "2015-06-18 07:36:28"
       ]
   ]
>>> 

Articleクラスの all()で Articleテーブルの全件のデータを取得し、データが1件追加されていることを確認。

長くなってきたので、モデルの操作は一旦ここで中段します。次回につづく。


まとめ

以下のことが出来るようになりました

  • モデルの作成
  • モデルのインスタンス作成とDBへ保存
  • DBからテーブルのデータを全件取得

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中