2018/10/12
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'; }
その他に主キーやタイムスタンプ、データベースの接続先をカスタマイズすることができます。
【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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。