次のステップでは,一覧表示の順番を更新日時の降順に変更したいので,テストデータのコメント一つひとつに登録日時を更新日時を設定します.ここで,登録日時はコメントの ID 順になるように設定し,更新日時はランダムになるように設定しています.
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' => '最初のコメントです!',
'created_at' => '2023-08-01 10:10:10',
'updated_at' => '2023-08-01 10:10:10'
]);
DB::table('comments')->insert([
'title' => '2つ目',
'body' => '2つ目のコメントです!',
'created_at' => '2023-08-01 10:20:10',
'updated_at' => '2023-08-01 10:20:10'
]);
DB::table('comments')->insert([
'title' => '<三個目>のコメント',
'body' => 'シーダによってテストデータを設定します.',
'created_at' => '2023-08-01 10:30:10',
'updated_at' => '2023-08-01 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-08-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-09-%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 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 ................. 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 ....... 5ms DONE
2019_08_19_000000_create_failed_jobs_table ................. 9ms 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 ................. 444.35 ms DONE
vagrant@ubuntu2204 comment_app $
SQLite を操作して,投入されたデータを確認します.投稿日時 (created_at) が ID の順番になっており,更新日時 (updated_at) がランダムな日時になっていることがわかります.
vagrant@ubuntu2204 comment_app $ sqlite3 database/database.sqlite ⏎ SQLite version 3.38.2 2022-03-26 13:51:10 Enter ".help" for usage hints. sqlite> .headers on ⏎ sqlite> SELECT id, title, created_at, updated_at FROM comments LIMIT 5 OFFSET 95; ⏎ id|title|created_at|updated_at 96|吉田 浩|2023-08-30 09:02:46|2023-09-21 12:48:16 97|加藤 拓真|2023-08-30 09:03:46|2023-09-30 05:28:33 98|村山 健一|2023-08-30 09:04:47|2023-09-21 19:22:23 99|原田 加奈|2023-08-30 09:05:47|2023-09-29 14:06:32 100|村山 洋介|2023-08-30 09:06:48|2023-09-28 05:32:49 sqlite> .exit ⏎ vagrant@ubuntu2204 comment_app $