モデルについて

2018/10/12

mainvisual

LaravelにおけるMVCのモデルについて学びます。

チュートリアル形式で学びます。

 

目的

Laravelでモデルを作成し、Mysqlにデータを流し込むところまでいきます。

データの流し込みにはtinkerを使います。

tinkerとはDBのやり取りを対話的に行えるシステムです。

ちょっとした動作確認に重宝します。

 

前提条件

DBの作成と設定は既に行われているとします。

初期設定について

 

進め方

【1】 モデルの作成

【2】 テーブルの作成

【3】 tinkerの起動

【4】 MySQLの注入

 

【1】 モデルの作成

Artisanコマンドでモデルを作成します。

php artisan make:model Article

上記のコマンドを実行するとArticleというモデルがappディレクトリの直下に作成されます。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
  //
}

ファイルを開いてみると中身が空のクラスが作成されています。

これだけでテーブルを操作することが出来ます。

Articleモデルが操作できるテーブルは自動的にarticlesになります。

特に明示的に指定しなければ、モデル名を複数形の「スネークケース」にしたものがテーブル名として使用されます。

例えば・・・

モデル名 テーブル名
Article articles
User users
Flight flights

となります。

テーブル名を明示的に指定する場合はモデルでtableプロパティを定義します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
  /**
  * モデルと関連しているテーブル
  *
  * @var string
  */
  protected $table = 'my_flights';
}

その他に主キーやタイムスタンプ、データベースの接続先をカスタマイズすることができます。

Laravel 5.1 Eloquent:利用の開始

 

【2】 テーブルの作成

Articlesテーブルの作成はマイグレーション機能を使って作成します。

マイグレーションについて

 

1. マイグレーションファイルの作成

マイグレーションファイルはArtisanコマンドで作成します。

php artisan make:migration create_articles_table

 
テーブルを作成するのでオプションにテーブル名を指定します。

php artisan make:migration create_articles_table --create=articles

マイグレーションファイルは database/maigrations フォルダに作成ます。

マイグレーションの実行順をフレームワークに知らせるため、ファイル名にタイムスタンプが付与されます。

 

2. マイグレーションファイルの編集

Artisanコマンドで生成されたマイグレーションファイルを編集します。

<?php

  // ...
  public function up()
  {
  Schema::create('articles', function(Blueprint $table)
  {
  $table->increments('id');
  $table->string('title'); // 追加
  $table->text('body'); // 追加
  $table->timestamps();
  });
  }
  // ...
}

articlesというテーブルにtitleとbodyのカラムを追加しました。

スキーマービルダーで記述します。

スキーマービルダーの詳しい使い方はこちら

 

3. マイグレーションファイルの実行(マイグレーション)

Artisanコマンドで編集したマイグレーションファイルを実行します。

php artisan migrate

これでarticlesのテーブルが作成されます。

マイグレーションで設定したスキーマ(構造)もできます。

 

【3】 tinkerの起動

Artisanコマンドでtinkerを起動します。

php artisan tinker

 

【4】 MySQLの注入

ではtinkerを使ってダミーのレコードを挿入してみます。

#Articleインスタンスを作成
>>> $article = new App\Article();

#titleに値をセット
>>> $article->title = "記事のタイトル テスト1";

#bodyに値をセット
>>> $article->body = "記事の 本文テスト2";

#Carbonクラスで取得した現在時刻をセット
>>> $article->published_at = Carbon\Carbon::now();

#セットした内容を確認
>>> $article->toArray();

#DBにデータを保存
>>> $article->save();

saveで実際にMysqlにinsertが走ります。

MySQLにログインしてテーブルの中身を見るとレコードがちゃんと入っているのが確認できるかと思います。

モデルについての学習は以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識