これまではテストデータが3件しかなかったので,ここではシードを増やして100件にします.シードを増やすためには,database/seeders/CommentsTableSeeder.php に insert
を追加するだけです.しかしながら,デタラメなデータを大量に作成するのも骨が折れる作業です.Laravel には Faker というフェイクデータを生成する便利な機能があるので,これを利用してみよう.
database/seeders/CommentsTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class CommentsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// 一旦中身を削除する
DB::table('comments')->delete();
DB::table('comments')->insert([
'title' => '最初のコメント',
'body' => '最初のコメントです!'
]);
DB::table('comments')->insert([
'title' => '2つ目',
'body' => '2つ目のコメントです!'
]);
DB::table('comments')->insert([
'title' => '<三個目>のコメント',
'body' => 'シーダによってテストデータを設定します.'
]);
DB::table('comments')->insert([
'title' => fake()->name(),
'body' => fake()->address() . " / " . fake()->unique()->safeEmail()
]);
}
}
シーダを変更したので,データベースのロールバック,マイグレーション,シードの設定を行います.
vagrant@ubuntu2204 comment_app $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎
INFO Rolling back migrations.
2023_10_15_115031_create_comments_table ................... 12ms DONE
2019_12_14_000001_create_personal_access_tokens_table ...... 5ms DONE
2019_08_19_000000_create_failed_jobs_table ................. 6ms DONE
2014_10_12_100000_create_password_reset_tokens_table ....... 4ms DONE
2014_10_12_000000_create_users_table ....................... 5ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ...................... 10ms DONE
2014_10_12_100000_create_password_reset_tokens_table ....... 5ms DONE
2019_08_19_000000_create_failed_jobs_table ................. 8ms DONE
2019_12_14_000001_create_personal_access_tokens_table ..... 12ms DONE
2023_10_15_115031_create_comments_table .................... 4ms DONE
INFO Seeding database.
Database\Seeders\CommentsTableSeeder ........................ RUNNING
Database\Seeders\CommentsTableSeeder .................. 36.26 ms DONE
vagrant@ubuntu2204 comment_app $
フェイクデータを追加できていることが確認できました.なお,フェイクデータの言語設定はすでにここで行なっていたので,日本語のデータなっていることに注意してください.
次に,当初から設定されていた3件のデータに加えて97件のフェイクデータを追加して,合計のデータ数が100件になるように変更してみます.
database/seeders/CommentsTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class CommentsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// 一旦中身を削除する
DB::table('comments')->delete();
DB::table('comments')->insert([
'title' => '最初のコメント',
'body' => '最初のコメントです!'
]);
DB::table('comments')->insert([
'title' => '2つ目',
'body' => '2つ目のコメントです!'
]);
DB::table('comments')->insert([
'title' => '<三個目>のコメント',
'body' => 'シーダによってテストデータを設定します.'
]);
$i = 1;
while ($i < 98) {
DB::table('comments')->insert([
'title' => fake()->name(),
'body' => fake()->address() . " / " . fake()->unique()->safeEmail()
]);
$i++;
}
}
}
もう一度,データベースをリセットします.データの投入に必要な時間(ミリ秒単位)が増加していることもわかります.
vagrant@ubuntu2204 comment_app $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎ INFO Rolling back migrations. 2023_10_15_115031_create_comments_table ................... 16ms DONE 2019_12_14_000001_create_personal_access_tokens_table ...... 6ms DONE 2019_08_19_000000_create_failed_jobs_table ................. 5ms DONE 2014_10_12_100000_create_password_reset_tokens_table ....... 5ms DONE 2014_10_12_000000_create_users_table ....................... 5ms DONE INFO Running migrations. 2014_10_12_000000_create_users_table ...................... 10ms DONE 2014_10_12_100000_create_password_reset_tokens_table ....... 4ms DONE 2019_08_19_000000_create_failed_jobs_table ................. 8ms DONE 2019_12_14_000001_create_personal_access_tokens_table ..... 11ms DONE 2023_10_15_115031_create_comments_table .................... 4ms DONE INFO Seeding database. Database\Seeders\CommentsTableSeeder ........................ RUNNING Database\Seeders\CommentsTableSeeder ................. 473.99 ms DONE vagrant@ubuntu2204 comment_app $
合計で100件のデータが登録されているこを確認します.毎回値は異なりますが,簡単に大量のデータを生成できることがわかります.