大量のダミーデータをデータベースに入れたいときは、FakerとFactoryを組み合わせて使います。
今回は、数個程度の少量のダミーデータを入れる為の、シーダーの使い方をメモしておきます。
管理者(Admin)のダミーデータを入れる想定で書いていきます。
環境:XAMPP for Windows, Laravel8
公式マニュアル:
https://laravel.com/docs/8.x/seeding#writing-seeders
1. artisanコマンドでシーダーを作る。
まずは以下のようにartisanコマンドでシーダーを作ります。
php artisan make:seeder AdminSeeder
そうすると、以下画像の通り、database\seeders配下にAdminSeederのファイルが作成されます。
2. シーダーファイルを設定する。
作成されたAdminSeederファイルに設定していきます。
まずは、DBファサードを使うので、use文で読み込みます。また、今回はパスワードもデータベース保存したいので、パスワードをHash化する為のHashファサードも読み込みます。
次に、run()メソッド内部を書いていきます。DBファーサードのtable()メソッドには、挿入したいテーブル名を書きます。また、insert()メソッドで、ダミーデータを連想配列形式で書いていきます。(キーの部分はテーブルのカラム名。)
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; //DBファサード読み込み
use Illuminate\Support\Facades\Hash; //Hashファサード読み込み
class AdminSeeder extends Seeder
{
public function run()
{
DB::table('admins')->insert([
'name' => 'アドミン太郎1',
'email' => 'admin1@test.com',
'password' => Hash::make('password123'),
'created_at' => '2021/09/13'
]);
}
}
3. DatabaseSeeder.phpファイルに登録する。
database\seeders\DatabaseSeeder.phpファイルのrun()メソッド部分に、作ったシーダーファイルを登録します。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call([
AdminSeeder::class //作ったシーダーファイルを登録する。
]);
}
}
4. artisanコマンドでテーブルに挿入する。
以下いずれかのコマンドでテーブルに挿入します。
普通にデータを入れたいとき。
php artisan db:seed
既存のデータを消して、新たにデータを入れたいとき。(他のテーブルの既存データも消える。)
php artisan migrate:fresh --seed
これで指定したカラム名にデータが入ります!
5. おまけ
上記ではダミーデータが一個だけだったけど、複数個入れるときは、以下のように配列の配列にします。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class AdminSeeder extends Seeder
{
public function run()
{
DB::table('admins')->insert([
[
'name' => 'アドミン太郎1',
'email' => 'admin1@test.com',
'password' => Hash::make('password123'),
'created_at' => '2021/09/13'
],
[
'name' => 'アドミン太郎2',
'email' => 'admin2@test.com',
'password' => Hash::make('password123'),
'created_at' => '2021/09/13'
],
[
'name' => 'アドミン太郎3',
'email' => 'admin3@test.com',
'password' => Hash::make('password123'),
'created_at' => '2021/09/13'
],
]);
}
}
以上です。