"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Laravel에서 Database Seeder를 사용하여 데이터를 쉽게 생성하는 방법

Laravel에서 Database Seeder를 사용하여 데이터를 쉽게 생성하는 방법

2024-07-31에 게시됨
검색:215

How to easily generate data with Database Seeders in Laravel

애플리케이션을 구축할 때 규모는 소규모, 중간 규모, 대규모입니다. 애플리케이션에서 테스트 데이터를 가지고 놀 수 있다는 것은 불가피하고 중요합니다.

그럼 두 가지 시나리오를 통해 간단한 것부터 고급까지 시작해 보겠습니다.

나. 모든 애플리케이션 또는 대부분의 애플리케이션에는 사용자가 있어야 합니다. 때로는 사용자를 관리자 또는 일반 사용자로 분류/태그하고 싶을 때가 있습니다. 따라서 아래에 나열된 테이블 사양을 사용하여 100명의 사용자가 포함된 간단한 시더를 생성해 보겠습니다.

  • 아이디, 이름, 성, 이메일, 비밀번호
  • 사용자 유형: 관리자 또는 일반 사용자

자, 이제 갑니다.

users 테이블에 시드하려면 물론 Laravel이 생성한 기본 사용자 마이그레이션 테이블이 있어야 합니다.

이 데모를 위해 테이블 ​​마이그레이션은 다음과 같아야 합니다.

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('password');
            $table->enum('user_type', ['user','admin'])->default('user');
            $table->rememberToken();
            $table->timestamps();
        });
    }

사용자 테이블에 대한 시더 클래스를 생성합니다.

php artisan make:seeder UserSeeder

그래서 방금 생성한 시더에 대한 값을 생성하려면 모든 Laravel 애플리케이션과 함께 제공되는 기본 Faker 패키지를 사용해야 합니다.

한 번에 100명의 사용자를 생성하려면 먼저 for-loop를 수행하고 다음과 같이 가짜/의사 데이터를 각 열에 전달합니다.

use Faker\Factory as Faker;

public function run()
{
   $faker = Faker::create();

   for(i = 0; i  $faker->firstName(),
        'last_name' => $faker->lastName(),
        'email' => $faker->email(),
        'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake
        'user_type' => $faker->randomElement(['admin', 'user'])
      ]);
   }
}

이를 데이터베이스에 시드하려면 아래 명령을 실행해야 합니다.

php artisan db:seed --class=UserSeeder

이렇게 하면 100명의 사용자가 생성되어 데이터베이스에 삽입됩니다.

그렇게 간단합니다.

이제 더 발전된 솔루션을 만나보세요.

다음을 만들어야 합니다.

  • 10개의 새로운 부서가 포함된 부서 테이블입니다.
  • 새로운 100명의 사용자를 생성하겠습니다.
  • 동일한 세부 정보가 있는 사용자 테이블을 참조하는 직원 테이블과 부서 테이블, 즉 부서_ID를 참조하는 추가 열이 있습니다.
우리는 사용자 테이블이 어떻게 보일지 이미 알고 있습니다. 이제 직원 테이블과 부서 테이블이 어떻게 보일지 살펴보겠습니다.

직원 테이블


Schema::create('staff', function (청사진 $table) { $테이블->id(); $table->string('첫번째_이름'); $table->string('성이름'); $table->string('이메일'); $table->foreignId('department_id')->references('id')->on('departments'); $table->foreignId('user_id')->references('id')->on('users'); $테이블->타임스탬프(); });
Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
부서 테이블:


Schema::create('departments', function (Blueprint $table) { $테이블->id(); $table->string('이름'); $테이블->타임스탬프(); });
Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
따라서 데이터베이스에 이러한 테이블을 포함하려면 마이그레이션을 실행해야 합니다.

이제 UserSeeder 클래스에 대해 앞서 언급한 핵심 사항을 구현하겠습니다.

    10개의 새로운 부서가 있는 부서 테이블입니다.
$now = 지금(); $카운트 = 0; $departmentNames = ['전자제품', '가정 및 정원', '장난감 및 게임', '건강 및 미용', '자동차', '스포츠 및 아웃도어', '의류 및 액세서리', '도서', '음악', '영화 및 TV', '식료품' ]; ($j=0; $j $departmentNames[$j], 'created_at' => $지금, 'updated_at' => $지금, ]); $개수; }
Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
마지막 두 개의 중요 항목을 함께 구현해야 합니다.

    새로운 100명의 사용자를 생성하겠습니다
  • 동일한 세부 정보가 있는
  • 사용자 테이블을 참조하는 직원 테이블과 부서 테이블, 즉 Department_id를 참조하는 추가 열이 있습니다.
if ($count == 10) { // 10개 부서가 모두 있는지 확인해야 합니다. $departments = 부서::pluck('id')->toArray(); for ($i=0; $i $faker->firstName(), 'last_name' => $faker->lastName(), '이메일' => $faker->이메일(), '비밀번호' => bcrypt('hello1234'), 'user_type' => $faker->randomElement(['admin', 'user']), 'created_at' => $지금, 'updated_at' => $지금 ]); 직원::만들기([ 'first_name' => $user->first_name, '성 이름' => $user->성 이름, '이메일' => $user->이메일, 'user_id' => $user->id, 'department_id' => $faker->randomElement($departments), // DB에서 임의의 부서 선택 'created_at' => $지금, 'updated_at' => $지금 ]); } }
Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
설명:

  • 먼저 10개의 부서를 만들었습니다.

  • 그런 다음 10개 부서가 모두 생성되었는지 확인하는 카운터를 설정합니다.

  • 카운터 조건이 true이면 100명의 사용자를 생성합니다.

  • 이 100명의 사용자 각각에 대해 직원 테이블이라는 다른 테이블에서 세부 정보를 참조해야 합니다.

  • 각 직원은 사용자에게 속해야 하고 부서에도 속해야 합니다. 따라서 이를 위해서는 이전에 생성한 모든 부서를 가져와서 Department_id 열에 무작위로 삽입해야 합니다.

전체 UserSeeder 구현


$now = 지금(); $카운트 = 0; $departmentNames = ['전자제품', '가정 및 정원', '장난감 및 게임', '건강 및 미용', '자동차', '스포츠 및 아웃도어', '의류 및 액세서리', '도서', '음악', '영화 및 TV', '식료품' ]; ($j=0; $j $departmentNames[$j], 'created_at' => $지금, 'updated_at' => $지금, ]); $개수; } $faker = 가짜::create(); if ($count == 10) { $departments = 부서::pluck('id')->toArray(); for ($i=0; $i $faker->firstName(), 'last_name' => $faker->lastName(), '이메일' => $faker->이메일(), '비밀번호' => bcrypt('hello1234'), 'user_type' => $faker->randomElement(['admin', 'user']), 'created_at' => $지금, 'updated_at' => $지금 ]); 직원::만들기([ 'first_name' => $user->first_name, '성 이름' => $user->성 이름, '이메일' => $user->이메일, 'user_id' => $user->id, 'department_id' => $faker->randomElement($departments), // DB에서 임의의 부서 선택 'created_at' => $지금, 'updated_at' => $지금 ]); } }
Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
그런 다음 다음을 실행합니다.


php artisan make:seeder --class=UserSeeder
Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });
궁금한 점이 있으시면 주저하지 마시고 남겨주세요. 즐거운 코딩하세요!

릴리스 선언문 이 기사는 https://dev.to/adetolaaremu/how-to-easily-generate-data-with-database-seeders-in-laravel-1kg6?1에 복제되어 있습니다. 침해가 있는 경우에는 Study_golang@163으로 문의하시기 바랍니다. .com에서 삭제하세요
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3