Laravel3回目 シーダーファイルの作成 多対多,1対多を使用し社員管理システムを作る

本日は、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で確認します。

すべてインポートできています。

まとめ

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

タイトルとURLをコピーしました