2018/10/12
動作確認でデモデーターを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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。