【フレームワークLaravel】データベースのシーディングやってみる・コマンドやSeederファイルの書き方
| 更新: 2024/09/25 | 3006文字
今回は、前回の記事で行った『Laravelデータベースマイグレーション』に続いて、データベースのシーディングを行ってみます。前回同様、コマンドやエディットするファイルなどの手順も紹介。さっそくやってみましょうか。
目次
Laravelのデータベースシーディングとは?
ダミーデータなどの、データベースに初期データセットを入力するのを、プログラミング系の用語で『シーディング』というようです。管理人は普通にダミーデータ入力と言っていたため、この用語は最近になって知りました。
Laravelにもシーディングの機能はあって、DatabaseSeederクラスのメソッドを呼んだりして実行できる、とのことです。詳しくは公式ドキュメントも読んでみてください。
laravel seeding
https://laravel.com/docs/11.x/seeding
Laravelのデータベースシーディング方法
データベース元の状態
前回の記事で、マイグレーションを使って、Laravelに接続しているsqlデータベースに、『t_user』というテーブルを用意しました。この段階では実際のデータがまだ入っていません。そこで今回は、シーディングを使って実際のデータを行っていきます。
(過去記事)Laravelデータベースのマイグレーションとは?実行するとどうなるの?
https://division-web.atelier-ss-agency.com/10538/laravel-migration/
make:seederコマンドでシーディングのファイルを作成
まずは、シーディングのファイルを作成します。これには専用のartisanコマンドが用意されていますね。作るファイル名は、テーブル名に合わせて『t_userTableSeeder』としましょうか。コマンドは以下の通りです。(cdでlaravelが入っているディレクトリを指定しています。make:seederの後ろがファイル名。)
php artisan make:seeder t_userTableSeeder
laravel/database/seeders内に『t_userTableSeeder.php』が作成されました。
t_userTableSeeder.phpの中身はこんな感じ。『run』というメソッドがありますけど、中身は無し。ここにシーディング時に行いたい内容を書いていきます。
なお『function run():void』というのがありますが、PHP 7.1.0 以降の関数が値を返さないことを示す型です。PHPマニュアル記載内容だと『戻り値を使おうとした場合はその値は null と評価』とのことです。無くても動かすことができました(return内容をデータベースに入れる、というわけではないため)。
作成されたt_userTableSeeder.phpに処理記載
生成されたt_userTableSeeder.phpをエディットします。runメソッド中身はこんな感じ。いっこいっこ作ってもいいんんですけど、今回は『ダミーデータをシーディングでサクッと入れる』ということで、ループで回して10件入れます(idはオートインクリメントで自動で入ります)。
{
for($i = 1; $i <= 10; $i++){v $age = $i+20;
$param = [
'mail'=>'num'. $i. '-info@example.net',
'name'=>'〇〇〇no.'. $i,
'age'=>$age,
];
DB::table('t_user')->insert($param);
}
}
また『use Illuminate\Support\Facades\DB;』をロードしている理由は、DBクラスのinsertを使いたいからです。
DatabaseSeeder.php内で、作ったt_userTableSeederをコールする
t_userTableSeeder.phpだけでは動かなくて、元々あったDatabaseSeeder.php内でコールします(家にあったLaravel参考書で調べました)。DatabaseSeeder.phpのrunメソッドに追加したコードは以下の通り。
書籍やサイトによっては『作ったシーダーを登録する』というような表現になっていることもあります。
php artisan db:seedコマンドでシーディングを実行する
ここまできたら、あとはコマンドを入れてシーディングを実行します。コマンドは以下の通り。
682.66 ms DONEというよな表示がでました。無事に実行されたみたいですね。
シーディングの実行結果
データベースを見てみました。ループで回した適当なレコードですが(笑)、きちんと登録されているようです。これSQL手打ちでやったら、相当めんどくさいですね。
エラー例(Class "Database\Seeders\DB" not found)
今回の件で、ちょっとエラーが出てしまったので、それの対応も紹介(Class "Database\Seeders\DB" not found)。上の段落で、DBクラスのinsertを使う話をしたんですけど、これが見つからないというエラーです。
原因は『Illuminate\Support\Facades\DB;』をロードしていないので、該当のクラスが見つかってないわけです。use Illuminate\Support\Facades\DB;を追記したのは、これに対応するためです。
あとがき・まとめ
- Laravelはシーディングでダミーデータ・初期データを登録する仕組みがある
- 手順はコマンドでファイル生成、メソッドを書いてDatabaseSeeder.php内でコールし、またコマンドで実行
- DBクラスのinsertを使うときは、use Illuminate\Support\Facades\DB追記する
まとめると、こんなところでしょうか。cmsとか構築するときの初期の表示確認用データ、ダミーの商品や従業員・ユーザーデータなどにも使えるかもしれません。
【カテゴリ】- Laravel
【タグ】- Laravel, データベース