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

WBOY
풀어 주다: 2024-07-26 04:48:43
원래의
386명이 탐색했습니다.

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 <= 99; i++)
   {
      User::create([
        'first_name' => $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명의 신규 사용자를 생성하겠습니다.
  • 사용자 테이블을 참조하는 직원 테이블. 동일한 세부 정보와 부서 테이블을 참조하는 추가 열(즉, Department_id
  • )

우리는 사용자 테이블이 어떻게 보일지 이미 알고 있습니다. 이제 직원 테이블과 부서 테이블이 어떻게 보일지 살펴보겠습니다.

직원 테이블

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) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
로그인 후 복사

따라서 데이터베이스에 이러한 테이블을 포함하려면 마이그레이션을 실행해야 합니다.

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

  • 10개의 새로운 부서가 있는 부서 테이블입니다.
$now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j <= 9; $j++){
            Department::create([
                'name' => $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count++;
        }
로그인 후 복사

마지막 두 개의 중요 항목을 함께 구현해야 합니다

  • 100명의 신규 사용자를 창출하겠습니다
  • 사용자 테이블을 참조하는 직원 테이블. 동일한 세부 정보와 부서 테이블을 참조하는 추가 열(즉, Department_id)이 있습니다.
if ($count == 10) { // we need to make sure we have all 10 departments
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i <= 99; $i++) {
                $user = User::create([
                    'first_name' => $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
}
로그인 후 복사

설명:

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

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

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

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

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

전체 UserSeeder 구현

        $now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j <= 9; $j++){
            Department::create([
                'name' => $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count++;
        }

        $faker = Faker::create();
        if ($count == 10) {
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i <= 99; $i++) {
                $user = User::create([
                    'first_name' => $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
        }
로그인 후 복사

그런 다음 다음을 실행하세요.

php artisan make:seeder --class=UserSeeder
로그인 후 복사

궁금한 점이 있으면 주저하지 말고 남겨주세요. 즐거운 코딩하세요!

위 내용은 Laravel에서 Database Seeder를 사용하여 데이터를 쉽게 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿