シーダーについて

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コマンドを使ってシーダーファイルを作成します。

1
php artisan make:seeder ArticlesTableSeeder

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

 

2.2 ArticlesTableSeederクラスの編集

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

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

~処理の流れ~

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

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

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

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

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

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

ArticlesTableSeeder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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メソッドでセキュリティーを解除してデモデータを流し込むようにします。

database/seeds/DatabaseSeeder.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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コマンドでシーダーファイルを実行させます。

1
php artisan db:seed

 

【5】 tinkerで確認作業

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

1
2
3
4
5
#tinkerの起動
php artisan tinker
 
#Articleモデルを介してarticlesテーブルの中身を全部表示
>>> App\Article::all()->toArray();

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

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

本庄マサノリ

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

>> Twitter をフォローする

 

-実践知識

【 転職体験談 】Webエンジニア35オーバーの僕が転職してみた
 
S