シーダーについて

2018/10/12

mainvisual

動作確認でデモデーターをDBに流し込むことがあります。

Laravelではシーダーと呼ばれるデータ投入の仕組みが用意されてます。

今回はチュートリアルを通してLaravel5.2におけるシーダーについて学びます。

 

目的

articles テーブルにデモデータを流し込みます。

 

前提条件

以下の作業が既に終わっているとして話を進めます。

データベースの設定 ⇒ 初期設定について

 

テーブルの作成 ⇒ マイグレーションについて

 

テーブルのスキーマは以下です。

カラム名 データ型 その他
ID int(10) auto_increment
title varchar(255)
body text
created_at timestamp
updated_at timestamp

 

進め方

【1】 シーダーファイルの作成・編集

   -2.1 articlesテーブルのシーダーファイル(ArticlesTableSeeder)を作成

   -2.2 ArticlesTableSeederクラスの編集

   -2.3 DatabaseSeederクラスの編集

【2】 シーダーの実行

【3】 tinkerで確認作業

 

【1】 シーダーファイルの作成・編集

シーダーファイルの作成・編集の流れは以下のようになります。

-2.1 articlesテーブルのシーダーファイル(ArticlesTableSeeder)を作成

-2.2 ArticlesTableSeederクラスの編集

-2.3 DatabaseSeederクラスの編集

 

2.1 articlesテーブルのシーダーファイル(ArticlesTableSeeder)を作成

Artisanコマンドを使ってシーダーファイルを作成します。

php artisan make:seeder ArticlesTableSeeder

上記のコマンドを実行するとdatabase/seedsにシーダーファイル(ArticlesTableSeeder.php)が作成されます。

 

2.2 ArticlesTableSeederクラスの編集

Artisanコマンドで作成したシーダーファイルを編集します。

処理はrunメソッドの中に記述していきます。

~処理の流れ~

(1)クエリービルダーやFakerなどのパスを通しておく

(2)クエリービルダーでarticlesテーブルのレコードを削除

(3)Fakerを使用してダミーデータを作成

(4)10件のデータを作成

ダミーデータはFakerを使用します。

Fakerとは自動でテストデータをランダムに投入してくれるライブラリです。

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model; // (1)
use Illuminate\Support\Facades\DB;  // (1)

use Faker\Factory as Faker;  // (1)
use Carbon\Carbon;  // (1)
use App\Article; // (1)

class ArticlesTableSeeder extends Seeder
{
  public function run()
  {
  DB::table('articles')->delete(); // (2)

  $faker = Faker::create('en_US'); // (3)

  for ($i = 0; $i < 10; $i++) { // (4)
    Article::create([
      'title' => $faker->sentence(),
      'body' => $faker->paragraph(),
      'created_at' => Carbon::today(),
      'updated_at' => Carbon::today()
    ]);
  }

  }

}

 

2.3 DatabaseSeederクラスの編集

シーダーには大元のDatabaseSeeder.phpがあります。

デフォルトで database/seeds/DatabaseSeeder.php があります。

そこに先ほど編集したシーダーファイルをコールします。

コールをする場所ですがungardメソッドの下に記述します。

Laravelではセキュリティの観点から、ある程度固まったデータをDBに挿入することはできません。

ungardメソッドでセキュリティーを解除してデモデータを流し込むようにします。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
  public function run()
  {
  Model::unguard(); // セキュリティー解除

  $this->call('ArticlesTableSeeder'); //ArticlesTableSeeder.phpをコールします。

  Model::reguard(); // セキュリティーを再設定
  }
}

 

【4】 シーダーの実行

Artisanコマンドでシーダーファイルを実行させます。

php artisan db:seed

 

【5】 tinkerで確認作業

tinkerを使って、中身を確認します。

#tinkerの起動
php artisan tinker

#Articleモデルを介してarticlesテーブルの中身を全部表示
>>> App\Article::all()->toArray();

Fakerで生成されたデモデータが確認できます。

シーダーに関しては以上です。

本庄マサノリ

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

>> Twitter をフォローする

 

-実践知識