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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。