make:seederは、データベースに初期データを投入するクラスを生成し、
db:seedは、そのデータをテーブルに投入します。
サンプル
php artisan make:seeder
php artisan make:seeder SampleSeeder
上記コマンドを実行すると、
このように生成されたクラスファイルのパスが表示され、
シーダークラスが生成されます。
生成されたファイル↓
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class SampleSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}
このrunメソッドにデータを挿入するロジックを追加、
DatabaseSeeder.phpに登録、
php artisan db:seedを実行すると、初期データの投入がされます。
(sample_tableは作成されている必要があります。テーブル作成にはphp artisan migrateが使用できます。)
以下に、sample_tableというテーブルにデータを投入するサンプルクラスを載せます。
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class SampleSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DB::table('sample_table')->insert([
'name' => 'taro',
'email' => 'sample@example.com',
'age' => 30,
]);
}
}
これで、sample_tableの、name、email、ageの3つのカラムに、
taro、sample@exaple.com、30の1つのデータが投入されるSeederクラスとなります。
php artisan db:seed
コマンド実行前に、2つ準備が必要です。
①composer.jsonに
"autoload": {
"classmap": [
"database/seeders",
]
},
上記の記述をする
この記述があることによって、/database/seeders/ 以下のシーダークラスが読み込まれるようになります。
②/database/seeders/ 以下にデフォルトで用意してある、DatabaseSeeder.phpに実行する
シーダークラスを登録
今回は、make:seederにて作成したSampleSeeder.phpを実行するため、
DatabaseSeeder.phpにSampleSeeder.phpを登録します。
<?php
namespace Database\Seeders;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call(SampleSeeder::class);
}
}
これらの①、②の実行準備をすることで、seedが実行できるようになります。
上記の実行準備を確認後、
php artisan db:seed
上記コマンドを実行すると、データが挿入されます。
実行後画面↓
実行後sample_tableデータ↓
上記のように、設定したシーダークラスのデータが正しく挿入されていることが分かります。
オプション
–class
実行するシーダークラスを指定します。
php artisan db:seed --class=SampleSeeder
上記コマンドを実行すると、SampleSeeder.phpのみが実行され、
このクラスのデータのみがテーブルに挿入されます。