前回のリレーションシップは難しかった…
今回はテストデータの作成方法を学びました!
この記事はおじさんの勉強メモである
記憶すること!
忘れてはいけないMVCで使用するフォルダとファイル
■ルート
routes\web.php
■コントローラー
app\Http\Controllers\○○○.php
■ビュー
resources\views\○○○.blade.php
■モデル
app\Models\○○○.php
■マイグレーション
database\migrations\〇〇〇〇〇〇〇_〇〇_create_products_table.php
■シーダー(ダミーデータ作成)
database\seeders
19章 シーディングとファクトリについて学ぼう
シーディング
Laravelの機能でデータベースのテーブルにテストデータ(ダミーデータ)を追加できる。
seedの「種をまく」から由来されてる。
シーディングの使い方
コマンドでシーダークラスを作成する。
php artisan make:seeder シーダークラス名
既存のusersテーブルのシーダークラスを作成してみました
php artisan make:seeder userSeeder
database/seedersフォルダの中に「userSeeder.php」ができました。中身は以下の通り。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class userSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}
今回はエロの力を使いたかったのでEloquent ORMでデータを追加したいと思います。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class userSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$user = new User([
'name' => 'ヤミラミ'
'email' => "yamirami@pole.com"
'email_verified_at' => 'この項目なんだろう'
'password' =>
'remember_token' => '覚えててくれよ'
]);
$user->save();
}
}
以下のコマンドでシーディングを実行
★基本コマンド
php artisan db:seed --class=シーダークラス名
★今回実行したコマンド
php artisan db:seed --class=userSeeder
む、エラーが…
newのスペルがちがうじゃねぇか!
あと連想配列後のカンマがないぞ!
以下のように修正した。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class userSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$user = new User([
'name' => 'ヤミラミ',
'email' => "yamirami@pole.com",
'email_verified_at' => 'この項目なんだろう',
'password' => 'yamirami',
'remember_token' => '覚えててくれよ'
]);
$user->save();
}
}
む、まだエラーが…
★Userクラスがないということでハイライトのところを変更
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
更にエラーが…
★「Unexpected character」文字は期待してない!とあるので、phpMyAdminを確認したところ、timestampの項目だったのでseedersで値を指定していた箇所を削除
ふぅ、エラー解消♪
ヤミラミが登録された
ファクトリ
ファクトリ(Factory)とは、ダミーデータ(テストデータ)を簡単に生成できるLaravelの機能。
「ダミーデータを生成する工場(Factory)」という感じ。
ダミーデータを作るだけならシーディングと同じじゃん♪
シーダークラス内でもダミーデータは生成できる。
ファクトリを利用すれば各カラム(氏名や住所など)にランダムな値をセットすることもできるので、より簡単に大量のダミーデータを生成できる。
ファクトリは大量のダミーデータを作成したいとき、
シーディングは境界値などのデータを指定したテストのときに使用するんだな♪
ファクトリの使い方
★コマンド
php artisan make:factory ファクトリ名
★実際に使用したコマンド
php artisan make:factory UserFactory
【シーダーズを編集する】
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
class userSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// ★ファクトリ★
// UserFactoryクラスで定義した内容にもとづいてダミーデータを生成し、usersテーブルに追加する
User::factory()->create();
}
}
★ファクトリで作成するデータの個数を指定する場合、count(10)など数を入れて指定する
User::factory()->count(10)->create();
★コマンドを実行
php artisan db:seed --class=userSeeder
たくさんのデータが簡単に出来た!スゴイ♪
Fakerのランダムの値を日本語化する方法
★config/app.php
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'ja_JP',
感想
シーディング、ファクトリは素晴らしい!
今まではテストデータをExcelでcsvを作成して、インポートしてたけどファクトリで簡単に大量のデータを作成できた。
シーディングは境界値テストなどで使用したいと思います!