ここでは,動作検証用に次の3名のテストユーザ ID をシーダを使って登録します.
# | name | login_id | password | |
---|---|---|---|---|
1 | A. Sample | a@sample.com | user_a | abc |
2 | B. Sample | b@sample.com | user_b | abc |
3 | C. Sample | c@sample.com | user_c | abc |
まず,次のコマンドでシーダの雛形を生成します.
vagrant@ubuntu2204 laravelAuth $ php artisan make:seeder UsersTableSeeder ⏎
INFO Seeder [database/seeders/UsersTableSeeder.php] created successfully.
vagrant@ubuntu2204 laravelAuth $
生成された雛形は次のようになっているはずです.
database/seeders/UsersTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}
このファイルを編集して,3名のデータを設定します.
database/seeders/UsersTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
DB::table('users')->delete();
User::create([
'name' => 'A. Sample',
'email' => 'a@sample.com',
'password' => bcrypt('abc'),
'created_at' => '2023-11-03 00:01:01',
'updated_at' => '2023-11-03 00:01:01'
]);
User::create([
'name' => 'B. Sample',
'email' => 'b@sample.com',
'password' => bcrypt('abc'),
'created_at' => '2023-11-03 00:02:01',
'updated_at' => '2023-11-03 00:02:01'
]);
User::create([
'name' => 'C. Sample',
'email' => 'c@sample.com',
'password' => bcrypt('abc'),
'created_at' => '2023-11-03 00:03:01',
'updated_at' => '2023-11-03 00:03:01'
]);
}
}
さらに DatabaseSeeder を編集します.
database/seeders/DatabaseSeeder.php
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
$this->call(UsersTableSeeder::class);
}
}
次のコマンドでデータベースにシードを投入します.
vagrant@ubuntu2204 laravelAuth $ php artisan db:seed ⏎
INFO Seeding database.
Database\Seeders\UsersTableSeeder .......................................... RUNNING
Database\Seeders\UsersTableSeeder ................................... 644.56 ms DONE
vagrant@ubuntu2204 laravelAuth $
なお,システムの開発中には何度もデータベースを再構成(ロールバックとマイグレーション)してテストデータを入れ直すことを行います.慣れないうちはマイグレーションの状況も確認しながら次の手順で行うと良いでしょう.
vagrant@ubuntu2204 laravelAuth $ php artisan migrate:status ⏎ Migration name ...................................... Batch / Status 2014_10_12_000000_create_users_table ....................... [1] Ran 2014_10_12_100000_create_password_reset_tokens_table ....... [1] Ran 2019_08_19_000000_create_failed_jobs_table ................. [1] Ran 2019_12_14_000001_create_personal_access_tokens_table ...... [1] Ran vagrant@ubuntu2204 laravelAuth $ php artisan migrate:rollback ⏎ INFO Rolling back migrations. 2019_12_14_000001_create_personal_access_tokens_table .... 12ms 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 ...................... 6ms DONE vagrant@ubuntu2204 laravelAuth $ php artisan migrate:status ⏎ Migration name ...................................... Batch / Status 2014_10_12_000000_create_users_table ....................... Pending 2014_10_12_100000_create_password_reset_tokens_table ....... Pending 2019_08_19_000000_create_failed_jobs_table ................. Pending 2019_12_14_000001_create_personal_access_tokens_table ...... Pending vagrant@ubuntu2204 laravelAuth $ php artisan migrate ⏎ INFO Running migrations. 2014_10_12_000000_create_users_table ..................... 18ms 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 vagrant@ubuntu2204 laravelAuth $ php artisan migrate:status ⏎ Migration name ...................................... Batch / Status 2014_10_12_000000_create_users_table ....................... [1] Ran 2014_10_12_100000_create_password_reset_tokens_table ....... [1] Ran 2019_08_19_000000_create_failed_jobs_table ................. [1] Ran 2019_12_14_000001_create_personal_access_tokens_table ...... [1] Ran vagrant@ubuntu2204 laravelAuth $ php artisan db:seed ⏎ INFO Seeding database. Database\Seeders\UsersTableSeeder .......................... RUNNING Database\Seeders\UsersTableSeeder ................... 647.57 ms DONE vagrant@ubuntu2204 laravelAuth $
複数のコマンドをセミコロンで区切ると,一気に実行することができます.
vagrant@ubuntu2204 laravelAuth $ php artisan migrate:rollback; php artisan migrate; php artisan db:seed ⏎
INFO Rolling back migrations.
2019_12_14_000001_create_personal_access_tokens_table .... 14ms DONE
2019_08_19_000000_create_failed_jobs_table ................ 4ms DONE
2014_10_12_100000_create_password_reset_tokens_table ...... 5ms DONE
2014_10_12_000000_create_users_table ...................... 4ms 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 .... 12ms DONE
INFO Seeding database.
Database\Seeders\UsersTableSeeder .......................... RUNNING
Database\Seeders\UsersTableSeeder ................... 640.57 ms DONE
vagrant@ubuntu2204 laravelAuth $
SQLite を操作してデータベースのテーブルに正しくデータが投入されているか確認します.なお,パスワードが平文ではなくハッシュ化されて保存されていることに注意してください.また,パスワードに「ソルト(塩)」を含めてハッシュ化しているため,3名が全く同じパスワード「abc」を設定していますが,異なるハッシュ化パスワードが保存されていることにも注意してください.
vagrant@ubuntu2204 database $ sqlite3 database.sqlite ⏎ SQLite version 3.38.2 2022-03-26 13:51:10 Enter ".help" for usage hints. sqlite> .tables ⏎ failed_jobs password_reset_tokens users migrations personal_access_tokens sqlite> .headers on ⏎ sqlite> select * from users; ⏎ id|name|email|email_verified_at|password|remember_token|created_at|updated_at 1|A. Sample|a@sample.com||$2y$12$FATUTvzG/WZ2XSTEF7mZsOAvm5SOyHY7xlG0.Fmj9JEDicVo1XwFe||2023-11-03 00:01:01|2023-11-03 00:01:01 2|B. Sample|b@sample.com||$2y$12$jWy5lXbC/niY8Tz1ICQ9TeNZHLekrTfj9gQGVgLZHARWRrybWEbye||2023-11-03 00:02:01|2023-11-03 00:02:01 3|C. Sample|c@sample.com||$2y$12$uKNjpsikh3MZcDJz4ZQTm.MdOzAgHiO5qtS21BFmWiYZomARNISK2||2023-11-03 00:03:01|2023-11-03 00:03:01 sqlite>
Webサーバを起動して,シードで投入したメールアドレスとパスワードを使ってログインしてみます.
ログインに成功してダッシュボードが表示されました.
ここまでの作業で,メールアドレスとパスワードでログインができるようになりました.次のページではメールアドレスの代わりにログイン ID でログインできるようにするために,データベースのテーブルに属性(列)を追加します.