本日は、Laravel2回目として、データベースにデータをインポートするために、シーダーファイルを作成します。
シーダーとはデータベースにテストデータを一斉に挿入する処理を指します。
シーダーファイルを実行するまでの流れになります。
1.シーダーファイルを作成
2.シーダーファイルの run() にデータを記述
3.DatabaseSeeder.php でシーダーファイルをコール
4.シーダーの実行
シーダーファイルの作成
では、最初にシーダーファイルを作成します。
officeテーブルのシーダーファイルを作成します。
php artisan make:seeder OfficesTableSeeder

make:seeder実行後、シーダーファイルが「C:\company\database\seeders」に作成されます。

残りのテーブル用のシーダーファイルも作ります。
php artisan make:seeder DepartmentsTableSeeder
php artisan make:seeder ProjectsTableSeeder
php artisan make:seeder UsersTableSeeder
php artisan make:seeder ProjectUserTableSeeder
シーダーファイルの編集
続いて、シーダーファイル内にデータベースにインポートするデータを記述していきます。
・OfficesTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class OfficesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
DB::table('offices')->delete();
DB::table('offices')->insert([
'id' => 1,
'office' => '東京'
]);
DB::table('offices')->insert([
'id' => 2,
'office' => '大阪'
]);
}
}
・DepartmentsTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DepartmentsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('departments')->delete();
DB::table('departments')->insert([
'department' => '総務部',
'office_id' => 1
]);
DB::table('departments')->insert([
'department' => '人事部',
'office_id' => 1
]);
DB::table('departments')->insert([
'department' => '経理部',
'office_id' => 1
]);
DB::table('departments')->insert([
'department' => '情報システム部',
'office_id' => 1
]);
DB::table('departments')->insert([
'department' => '製造部',
'office_id' => 2
]);
DB::table('departments')->insert([
'department' => '品質保証部',
'office_id' => 2
]);
DB::table('departments')->insert([
'department' => '購買部',
'office_id' => 1
]);
DB::table('departments')->insert([
'department' => '物流部',
'office_id' => 2
]);
DB::table('departments')->insert([
'department' => '営業部',
'office_id' => 2
]);
}
}
・ProjectsTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ProjectsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('projects')->delete();
DB::table('projects')->insert([
'name' => '5Sプロジェクト'
]);
DB::table('projects')->insert([
'name' => '品質向上プロジェクト'
]);
DB::table('projects')->insert([
'name' => '新規ビジネスプロジェクト'
]);
}
}
・UsersTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->delete();
DB::table('users')->insert([
'name' => '佐藤'
]);
DB::table('users')->insert([
'name' => '田中'
]);
DB::table('users')->insert([
'name' => '井上'
]);
DB::table('users')->insert([
'name' => '藤井'
]);
DB::table('users')->insert([
'name' => '飯田'
]);
}
}
・ProjectUserTableSeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ProjectUserTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// 一旦中身を削除する
DB::table('project_user')->delete();
DB::table('project_user')->insert([
'project_id' => 1,
'user_id' => 1
]);
DB::table('project_user')->insert([
'project_id' => 2,
'user_id' => 1
]);
DB::table('project_user')->insert([
'project_id' => 1,
'user_id' => 2
]);
DB::table('project_user')->insert([
'project_id' => 3,
'user_id' => 2
]);
DB::table('project_user')->insert([
'project_id' => 1,
'user_id' => 3
]);
DB::table('project_user')->insert([
'project_id' => 2,
'user_id' => 3
]);
DB::table('project_user')->insert([
'project_id' => 3,
'user_id' => 3
]);
DB::table('project_user')->insert([
'project_id' => 2,
'user_id' => 4
]);
DB::table('project_user')->insert([
'project_id' => 3,
'user_id' => 4
]);
}
}
DatabaseSeeder.php でシーダーファイルをコール
C:\company\database\seeders内にあるDatabaseSeeder.phpに下記を追加します。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// \App\Models\User::factory(10)->create();
$this->call(OfficesTableSeeder::class);
$this->call(DepartmentsTableSeeder::class);
$this->call(UsersTableSeeder::class);
$this->call(ProjectsTableSeeder::class);
$this->call(ProjectUserTableSeeder::class);
}
}
シーダーの実行
シーダーを実行し、データベースにデータをインポートします。
下記コマンドを実行します。
php artisan db:seed

データがインポートされたかMySQLで確認します。





すべてインポートできています。
まとめ
本日はシーダーを使ってデータベースにデータをインポートしました。
次回は、モデルの作成です。