Laravel - 10. シーディング
データベースのマイグレーションができたので、次は messages
テーブルに初期データを登録しておきましょう。ここでは次のような3件のデータを登録するものとします。
ID | 内容 | 更新日時 | 作成日時 |
---|---|---|---|
1 | Hello | 2020/09/01 00:00:00 | 2020/09/01 00:00:00 |
2 | Bonjour | 2020/09/01 00:00:00 | 2020/09/01 00:00:00 |
3 | Ciao | 2020/09/01 00:00:00 | 2020/09/01 00:00:00 |
このようなデータを登録するために、直接INSERT文を記述して messages
テーブルにデータを登録することもできますが、Laravelはシーディングという仕組みで初期データを準備できます。シーディングは php artisan make:seeder
コマンドでシードファイルを作成し、 php artisan db:seed
コマンドでシードファイルに記述したデータをテーブルに反映します。
まずは php artisan make:seeder
コマンドを確認しておきましょう。
$ php artisan make:seeder シードクラス名
php artisan make:seeder
コマンドにはシードクラス名を指定します。シードクラス名には任意の名前を付けることができますが、ここでは messages
テーブルのシードクラスを作るので MessagesSeeder
という名前を指定することにします。
$ php artisan make:seeder MessagesSeeder
Seeder created successfully.
コマンドが成功すると database/seeds/MessagesSeeder.php
ファイルが生成されます。テキストエディタで database/seeds/MessagesSeeder.php
ファイルを開いてみましょう。
<?php
use Illuminate\Database\Seeder;
class MessagesSeeder extends Seeder
{
public function run()
{
//
}
}
生成された MessagesSeeder
クラスは Seeder
クラスを継承しています。 MessagesSeeder
クラスの run
メソッドに初期データを登録する処理を実装します。
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class MessagesSeeder extends Seeder
{
public function run()
{
DB::table("messages")->insert([
["text" => "Hello",
"updated_at" => "2020/09/01 12:34:56", "created_at" => "2020/09/01 12:34:56"],
["text" => "Bonjour",
"updated_at" => "2020/09/01 12:34:56", "created_at" => "2020/09/01 12:34:56"],
["text" => "Ciao",
"updated_at" => "2020/09/01 12:34:56", "created_at" => "2020/09/01 12:34:56"],
]);
}
}
ここでは DB::table("messages")->insert
メソッドを使って messages
テーブルに3件のレコードを登録しています。このように DB
ファサードを使って初期データを登録できます。
次にシーディングを管理する database/seeds/DatabaseSeeder.php
ファイルを見てみましょう。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
// $this->call(UsersTableSeeder::class);
}
}
DatabaseSeeder
クラスはシーディングの実行を管理するプログラムです。このファイルから先ほどの MessagesSeeder
クラスを呼び出すように実装します。 DatabaseSeeder
クラスの run
メソッドにはコメントアウトされている処理があるので、このコメントを参考に先ほど作成した MessagesSeeder
クラスを呼び出します。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(MessagesSeeder::class);
}
}
以上でシードファイルの準備は完了です。
シードデータの登録
続いて php artisan db:seed
コマンドで作成したシードファイルから初期データを登録してみましょう。
$ php artisan db:seed
Seeding: MessagesSeeder
Seeded: MessagesSeeder (0.1 seconds)
Database seeding completed successfully.
上記のようにメッセージが出力されれば初期データの登録は完了です。実際にデータベースに接続して messages
テーブルの定義を確認してみましょう。ここではPostgreSQLのクライアントツールを起動して以下のようにコマンドを入力します。
laravel=# select * from messages;
id | text | created_at | updated_at
----+---------+---------------------+---------------------
1 | Hello | 2020-09-01 12:34:56 | 2020-09-01 12:34:56
2 | Bonjour | 2020-09-01 12:34:56 | 2020-09-01 12:34:56
3 | Ciao | 2020-09-01 12:34:56 | 2020-09-01 12:34:56
(3 rows)
SQLの実行結果からシードファイルに定義した3件のレコードが登録されていることがわかります。
まとめ
- シーディングはテーブルの初期データを登録する仕組み
php artisan make:seeder
コマンドでシードファイルを作成するphp artisan db:seed
コマンドでシードデータをテーブルに作成する