Database Table 구조
테이블은 기본 프로젝트 생성시 같이 생성되는 users 테이블을 사용하겠습니다.
users 테이블의 구조 정보는 database/migrations/2014_10_12_000000_create_users_table.php 파일에 정의되어 있습니다.
Laravel에서는 정의되어 있는 파일을 참조해서 테이블로 만들어주고, 갱신해주는 등 다양한 기능을 제공합니다.
Spring에서 JPA의 ddl-auto 기능과 유사한 이 기능을 마이그레이션이라고 부릅니다.
root@80612f23b0cf:/var/www/html# cd /var/www/html/laravel-api
root@80612f23b0cf:/var/www/html/laravel-api# php artisan migrate --path=database/migrations/2014_10_12_000000_create_users_table.php
PHP Warning: Module "pdo_mysql" is already loaded in Unknown on line 0
INFO Preparing database.
Creating migration table ............................................................................................................... 64ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ................................................................................................... 91ms DONE
프로젝트로 이동 후 마이그레이션 명령어를 실행하면 Database에 users 테이블이 자동으로 만들어집니다.
더미 데이터 생성
Laravel에는 더미 데이터를 생성해주는 모델 팩토리라는 아주 편리한 기능있는데, 이 기능을 사용해서 더미 데이터를 만들어보겠습니다.
더미 데이터를 생성하려면 팩토리와 시드를 작업해줘야 합니다.
팩토리는 프로젝트 생성시 기본으로 database/factories/UserFactory.php 경로에 만들어지기 때문에 따로 만들지는 않겠습니다.
php artisan make:factory UserFactory.php
팩토리 생성 명령어 입니다.
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
*/
class UserFactory extends Factory
{
/**
* The current password being used by the factory.
*/
protected static ?string $password;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->name(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
];
}
/**
* Indicate that the model's email address should be unverified.
*/
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
'email_verified_at' => null,
]);
}
}
대충 보시면 아시겠지만 definition 메서드에서 users 테이블의 컬럼에 해당하는 값들을 어떻게 기준으로 더미데이터를 만들것인지 정의하고있습니다.
시드를 만들어보겠습니다.
root@80612f23b0cf:/var/www/html/laravel-api# php artisan make:seeder UserSeeder
PHP Warning: Module "pdo_mysql" is already loaded in Unknown on line 0
INFO Seeder [database/seeders/UserSeeder.php] created successfully.
위의 명령어로 시드 파일을 생성해주세요.
database/seeders/UserSeeder.php 경로에 파일이 생성되었습니다.
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Seeder;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
User::factory(10)->create();
}
}
factory 메서드 인자에 10을 넣었으니, 더미 데이터 추가 명령어 실행시 더미 데이터 10개가 생성됩니다.
root@80612f23b0cf:/var/www/html/laravel-api# php artisan db:seed --class=UserSeeder
PHP Warning: Module "pdo_mysql" is already loaded in Unknown on line 0
INFO Seeding database.
더미 데이터가 팩토리에서 정의한대로 생성되었습니다.