Laravel 10 入門トップページ


目次

  1. プロジェクトを作成する
  2. データベースファイルを作成する
  3. Visual Studio Code を設定する
  4. .env を編集して初期設定する
  5. タイムゾーンと言語を設定する
  6. Webサーバを起動して終了する
  7. マイグレーションファイルを生成する
  8. テスト用データを設定する
  9. モデルを作成する
  10. コントローラを作成する
  11. ルートを定義する
  12. データベースからデータを取り出す
  13. トップページにリンクを設置する
  14. ビューを使ってレコードを表示する
  15. コメントを個別に表示するページを作成する
  16. コメント投稿機能を実装する
  17. 投稿内容を検証する
  18. 投稿内容を編集する
  19. 投稿コメントを削除する
  20. テストの自動化を実現する
  21. テストカバレッジを計測する
  22. 複数のLinuxコマンドを実行し,履歴からも実行する
  23. ビューをレイアウト化する
  24. Bootstrap を導入する
  25. SQLite を操作する
  26. フェイカでシーダを拡張する
  27. ページネーションを作る
  28. シーダに登録日時と更新日時を追加する
  29. 一覧表示を更新日時の降順にする
  30. フラッシュメッセージを表示する
  31. スタイルシートでデザインを整える

Laravel によるコメント掲示板の開発

シーダに登録日時と更新日時を追加する

次のステップでは,一覧表示の順番を更新日時の降順に変更したいので,テストデータのコメント一つひとつに登録日時を更新日時を設定します.ここで,登録日時はコメントの 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 $

目次に戻る