今回はLaravelでSeederを用いてダミーデータを簡易的に作成する方法を紹介します。
開発環境
PHP 7.3.9
MAMP 5.7
Mysql 5.7.26
Laravel 6.20.7
Composer 2.0.8
下準備
Seederを作成するためにプロジェクトを作ります。
$ composer create-project laravel/laravel seeder_test --prefer-dist "6.*"
$ cd seeder_test
$ composer require laravel/ui "1.x" --dev
$ php artisan ui bootstrap --auth
$ npm install && npm run dev
次にDB接続。
phpMyAdmin等で適宜DBとuserアカウントを作成し、
.envファイルに環境変数を設定して、DB接続をします。
$ php artisan migrate
--authで認証機能が追加されるのでusersテーブルが作られます。
Seederでダミーデータを作成する
ダミーデータの設定
usersテーブルが作成されたのが確認できたらまずUsesTableSeeder.phpというファイルを作成しましょう。
$ php artisan make:seeder UsersTableSeeder
database/seeds配下にファイルが生成されます。
public function run (){}
にダミーデータを設定します。
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@gmail.com',
'password' => Hash::make('password'),
]);
}
}
上記はランダムな10文字でuserの名前をメールアドレスを生成するように記述しています。
passwordに関しては暗号化が必須のためHash::make()を記述します。
ちなみに自分で指定した値にすることも可能です。
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
[
'name' => '太郎',
'email' => 'taro@sample.com',
'password' => Hash::make('password')
], [
'name' => '二郎',
'email' => 'jiro@sample.com',
'password' => Hash::make('password')
], [
'name' => '三郎',
'email' => 'saburo@sample.com',
'password' => Hash::make('password')
]
]);
}
}
連想配列で複数設定してみました。
次にDatabaseSeeder.phpでUsersTableSeederを紐づける必要があるので以下のように設定します。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
}
}
他にSeederファイルを作成した場合は適宜、紐付けが必要になるので注意してください。
composerのオートローダを再生成
シーダクラスを書き換えた場合はターミナルで下記のを実行しなければなりません。
$ composer dump-autoload
DBにダミーデータを保存する
以下のコマンドを実行すればDBにダミーデータが保存されているはずです。
$ php artisan db:seed
もしすでにデータが保存されている状態で上記コマンドを実行する場合はエラーが発生するはずなので、
$ php artisan migrate:refresh
を実行すればDBのデータをリセットしてからseedファイルで設定したダミーデータを保存してくれます。
DBを確認してデータが保存されていれば完了です。