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

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

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


モデルの作成

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

php artisan make:model Article

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

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

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()
=> App\Article {#2861}
>>> 
>>> $article->toArray()
=> []
>>> 
>>> $article->title = 'はじめてのタイトル'
=> "はじめてのタイトル"
>>> 
>>> $article->body = 'かくかくしかじか'
=> "かくかくしかじか"
>>> 
>>> $article->published_at = Carbon\Carbon::now()
=> Carbon\Carbon @1535050359 {#2864
     date: 2018-08-24 03:52:39.156431 Asia/Tokyo (+09:00),
   }
>>> 
>>> $article->toArray()
=> [
       "title"        => "はじめてのタイトル",
       "body"         => "かくかくしかじか",
       "published_at" => Carbon\Carbon @1535050359 {#2864
           date: 2018-08-24 03:52:39.156431 Asia/Tokyo (+09:00),
       },
   ]
>>> 
>>> $article->save()
=> true
>>> 
  • Article クラスを new することで、$article 変数に空の Article を作成。
  • title, body, published_at に値をセット。
  • published_at には Carbon クラスで取得した現在時刻をセット。
  • save() で DBにデータを保存。

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

Article を全件表示

>>> App\Article::all()->toArray()
=> [
     [
       "id" => 1,
       "title" => "はじめてのタイトル",
       "body" => "かくかくしかじか",
       "created_at" => "2018-08-24 03:54:26",
       "updated_at" => "2018-08-24 03:54:26",
       "published_at" => "2018-08-24 03:52:39",
     ],
   ]
>>> 
>>> exit 

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

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


まとめ

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

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

コメントを残す

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

WordPress.com ロゴ

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

Google+ フォト

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

Twitter 画像

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

Facebook の写真

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

%s と連携中