こんにちは。Tです(ベトナムの学校でこう呼ばれていました)。
今回はLaravelにダミーデータをいれる方法を学んでいきます。
具体的には「Seeder」と「Factory」を学んでいきます。
Contents
Seeder(シーダ)
シーダ(初期値設定)クラスを使用し、テストデーターをデーターベースに設定するシンプルな方法もLaravelには備わっています。
Laravelドキュメント 6.× データベース:シーディング https://readouble.com/laravel/6.x/ja/seeding.html
噛み砕くと、LaravelにはすでにダミーデータをDBにいれる機能を持っているということです。
今回はuserを作成しましょう。
Userをseedしてみる
% php artisan make:seeder UsersTableSeeder
database/seeds/UsersTableSeeder.php
が作成されました。中身に追記していきましょう。
<?php use Illuminate\Database\Seeder; use Illuminate\Support\Facades\Hash; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('users')->insert([ 'name' => 'aburasoba', 'email' => 'hoge@hoge.com', 'password' => Hash::make('testtest'), ]); } }
usersテーブルのnameカラム、emailカラム、passwordカラムにそれぞれ
「aburasoba」「hoge@hoge.com」「testtest」というレコードを追加します。
ここで出てくる「Hash」でパスワードをハッシュ化しています。
ハッシュ化とは、元のデータから一定の計算手順に従ってハッシュ値と呼ばれる規則性のない固定長の値を求め、その値によって元のデータを置き換えること。パスワードの保管などでよく用いられる手法である。
IT用語辞典 http://e-words.jp/w/%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5%E5%8C%96.html
次にdatabase/seeds/DatabaseSeeder.phpを確認します(こちらはすでにあるはず。)
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); } }
runメソッドの中身のコメントアウトを外しましょう。これで準備完了です。
ターミナルでseedを実行しましょう。
% php artisan db:seed
以下の表示になったら成功です。
Seeding: UsersTableSeeder Seeded: UsersTableSeeder (0.08 seconds) Database seeding completed successfully.
実際にアプリケーションでログインしてみましょう!
いかがだったでしょうか。Seederを使うことでダミーデータを挿入することができましたね。
postをseedしてみる
大きな流れは一緒です。
% php artisan make:seeder PostsTableSeeder
database/seeds/PostsTableSeeder.php
が作成されました。
<?php use Illuminate\Database\Seeder; class PostsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table('posts')->insert([ 'title' => '初めての投稿', 'body' => '楽しいLaravel', 'user_id' => 1, ]); } }
さて、私は上記のように書きました。
ここで問題となるのがuser_idです。実際に存在するusersのidを記入しないとエラーが出てしまうので注意してください。
では、実際に存在するのかどうかを確認してみましょう。
mysqlで確認します。
//bash % msyql -u root -proot % use blog % select * from users;
1行目:mysqlにログイン
2行目:使用するデータベースを指定
3行目:usersテーブルのデータを全て表示
上記コマンドを打つことで、usersのデータをみることができます。
idカラムを確認して、存在するuserのidをチェックすることができます。
それでは続きに戻ります。
次にdatabase/seeds/DatabaseSeeder.phpに追記します。
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { // $this->call(UsersTableSeeder::class); $this->call(PostsTableSeeder::class); } }
ここで注意。UsersTableSeederについてはコメントアウトしましょう。というのもこちらをコメントアウトせずにseedを行うと、再度UsersTableSeederが働き、先ほど作成したユーザーがまた作られてしまうからです。
//bash % php artisan db:seed
どうでしょうか。うまくいったでしょうか。
アプリの一覧ページを確認して今作成した投稿が表示されているかを確認しましょう。

大量のダミーデータを作成、保存したい。FactoryとFaker。
投稿をダミーでたくさん表示させたい。こんなことを思った方いらっしゃるのではないでしょうか。
もちろん先ほどのSeedでデータをたくさん手入力して作成することもできます。
面倒ですよね。
そこでFactoryとFakerを使いましょう。
FakerとFactory
database/factories/UserFactory.phpを確認しましょう。実はすでにUserに関してはFactoryが用意されています。
こちらを活用して、userのダミーデータを作成しましょう。
database/seeds/UsersTableSeeder.php
<?php use Illuminate\Database\Seeder; use Illuminate\Support\Facades\Hash; use App\User; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { factory(User::class, 10)->create(); } }
先ほど記入していた中身の代わりに、factoryを使用するように書き換えました。
次にdatabase/seeds/DatabaseSeeder.phpを確認します。
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); } }
ターミナルでseedを実行しましょう。
//bash % php artisan db:seed
いかがでしょうか。
先ほどのように、mysqlの中身をターミナルから確認していきましょう。
//bash % mysql -u root -proot % use blog % select * from users;
外国の方のレコードが10件増えました。
Fakerで生成されるデータを日本語にする
config/app.php
// 'faker_locale' => 'en_US', の代わりに 'faker_locale' => 'ja_JP', こちらに変更
に変更します。configを変更したのでキャッシュをクリアしましょう
//bash % php artisan config:cache
もう一度seedをしてみましょう。
//bash % php artisan db:seed
こうすることで、日本人の方のダミーデータを保存することができます。
いかがだったでしょうか。今回はダミーデータを挿入する方法について学んでいきました。
初心者の方はまずはSeederを抑えることから始めましょう!
お疲れ様でした。
コメントを残す