これまで3件のコメントデータをテストデータとしてシーダから登録していましたが,これを拡張して100件のコメントが登録されるようにします.シードを増やすためには,database/seeders/CommentsTableSeeder.php に insert を追加するだけです.しかしながら,デタラメなデータを大量に作成するのも骨が折れる作業です.Laravel には Faker というフェイクデータを生成する便利な機能があるのでこれを利用します.
次のとおり,3件のデータに加えてフィクデータを97件追加します.このとき,created_at は ID の順番になるようにし,updated_at は created_at よりもあとのランダムな日時に設定します.
<?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' => '最初のコメントです!',
'created_at' => '2023-10-02 10:10:10',
'updated_at' => '2023-10-02 10:10:10'
]);
DB::table('comments')->insert([
'title' => '2つ目',
'body' => '2つ目のコメントです!',
'created_at' => '2023-10-02 10:20:10',
'updated_at' => '2023-10-02 10:20:10'
]);
DB::table('comments')->insert([
'title' => '<三個目>のコメント',
'body' => 'シーダによってテストデータを設定します.',
'created_at' => '2023-10-02 10:30:10',
'updated_at' => '2023-10-02 10:30:10'
]);
$i = 0;
while ($i < 97) {
// created_at がID順になるような値を作る
$s = floor($i / 2); // 秒
$m = $i % 10; // 分 10で割った余り
$h = floor($i / 10); // 時
$format = '2023-10-30 %02d:%02d:%02d';
$created_at = sprintf($format, $h, $m, $s);
// updated_at はランダムに
$s = rand(0,59);
$m = rand(0,59);
$h = rand(0,23);
$d = rand(1,30);
$format = '2023-11-%02d %02d:%02d:%02d';
$updated_at = sprintf($format, $d, $h, $m, $s);
DB::table('comments')->insert([
'title' => fake()->name(),
'body' => fake()->address() . " / " . fake()->unique()->safeEmail(),
'created_at' => $created_at,
'updated_at' => $updated_at
]);
$i++;
}
}
}
データベースを一旦ロールバックし,マイグレーションを実行したのち,シーダを再投入します.このとき,複数のコマンドを ;
(コロン)で区切って一気に実行することができます.
vagrant@ubuntu2204 CommentAPI $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎
INFO Rolling back migrations.
2023_12_16_135311_create_comments_table .................... 25ms DONE
2019_12_14_000001_create_personal_access_tokens_table ...... 11ms DONE
2019_08_19_000000_create_failed_jobs_table .................. 7ms DONE
2014_10_12_100000_create_password_reset_tokens_table ........ 9ms DONE
2014_10_12_000000_create_users_table ....................... 21ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ....................... 33ms DONE
2014_10_12_100000_create_password_reset_tokens_table ........ 9ms DONE
2019_08_19_000000_create_failed_jobs_table ................. 20ms DONE
2019_12_14_000001_create_personal_access_tokens_table ...... 23ms DONE
2023_12_16_135311_create_comments_table .................... 12ms DONE
INFO Seeding database.
Database\Seeders\CommentsTableSeeder ......................... RUNNING
Database\Seeders\CommentsTableSeeder ..................... 773 ms DONE
vagrant@ubuntu2204 CommentAPI $
データベースを操作して,100件のデータが投入されていることを確認します.
sqlite> SELECT * FROM comments; ⏎
id|title|body|created_at|updated_at
1|最初のコメント|最初のコメントです!|2023-10-02 10:10:10|2023-10-02 10:10:10
2|2つ目|2つ目のコメントです!|2023-10-02 10:20:10|2023-10-02 10:20:10
3|<三個目>のコメント|シーダによってテストデータを設定します.|2023-10-02 10:30:10|2023-10-02 10:30:10
4|中村 裕太|1463909 岡山県山本市中央区喜嶋町原田4-8-8 / kobayashi.ryohei@example.org|2023-10-30 00:00:00|2023-11-08 16:50:38
5|渡辺 直子|3201266 長野県青田市中央区山岸町原田1-5-1 / yasuhiro78@example.com|2023-10-30 00:01:00|2023-11-16 06:51:09
6|桐山 直人|3036518 岐阜県斉藤市南区山岸町田中2-8-8 / kekoda@example.com|2023-10-30 00:02:01|2023-11-09 10:07:19
...(中略)...
98|伊藤 幹|9722398 新潟県渚市東区笹田町渚6-9-8 コーポ大垣103号 / haruka11@example.com|2023-10-30 09:04:47|2023-11-12 06:09:23
99|斉藤 舞|7186306 千葉県宮沢市南区桐山町鈴木9-1-5 / yoshida.nanami@example.org|2023-10-30 09:05:47|2023-11-30 02:25:44
100|三宅 結衣|4508690 東京都高橋市西区加納町山口5-5-7 / shuhei92@example.org|2023-10-30 09:06:48|2023-11-07 22:56:49
sqlite>
次に curl
コマンドで全てのデータを取得します.
C:\Users\Rinsaka>curl http://192.168.56.101:8000/api/comments/ ⏎
{"comments":[{"id":1,"title":"最初のコメント","body":"最初のコメントです!","updated_at":"2023-10-02T10:10:10.000000Z"},{"id":2,"title":"2つ目","body":"2つ目のコメントです!","updated_at":"2023-10-02T10:20:10.000000Z"},{"id":3,"title":"<三個目>のコメント","body":"シーダによってテストデータを設定します.","updated_at":"2023-10-02T10:30:10.000000Z"},{"id":4,"title":"中 村 裕太","body":"1463909 岡山県山本市中央区喜嶋町原田4-8-8 \/ kobayashi.ryohei@example.org","updated_at":"2023-11-08T16:50:38.000000Z"},{"id":5,"title":"渡辺 直子","body":"3201266 長野県青田市中央区山岸町原田1-5-1 \/ yasuhiro78@example.com","updated_at":"2023-11-16T06:51:09.000000Z"},{"id":6,"title":"桐山 直人","body":"3036518 岐阜県斉藤市南区山岸町田中2-8-8 \/ kekoda@example.com","updated_at":"2023-11-09T10:07:19.000000Z"},
...(中略)...
{"id":98,"title":"伊藤 幹","body":"9722398 新潟県渚市東区笹田町渚6-9-8 コーポ大垣103号 \/ haruka11@example.com","updated_at":"2023-11-12T06:09:23.000000Z"},{"id":99,"title":"斉藤 舞","body":"7186306 千葉県宮沢市南区桐山町鈴木9-1-5 \/ yoshida.nanami@example.org","updated_at":"2023-11-30T02:25:44.000000Z"},{"id":100,"title":"三宅 結衣","body":"4508690 東京都高橋市西区加納町山口5-5-7 \/ shuhei92@example.org","updated_at":"2023-11-07T22:56:49.000000Z"}]}
C:\Users\Rinsaka>
現時点では高々100件のデータですが,データ件数が多くなったときに全てのデータを取得することは現実的ではありません.次のページではページネーションを利用して一部のデータだけを取得する機能を実装します.