seeding

db ν…Œμ΄λΈ”μ— 데이터λ₯Ό μ‹¬λŠ” ν–‰μœ„λ₯Ό μ‹œλ”©μ΄λΌκ³  ν•˜κ³  μ΄λŠ” μ„œλΉ„μŠ€ ꡬ성에 ν•„μš”ν•œ κΈ°λ³Έ 데이터, 개발 쀑에 ν•„μš”ν•œ 데이터, ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ 데이터λ₯Ό 빨게 μ€€λΉ„ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

라라벨은 클래슀 λ¬Έλ²•μœΌλ‘œ 데이터 μ‹œλ”©μ„ μžλ™ν™”ν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•˜κ³  μžˆλ‹€.

$ php artisan make:seeder UsersTableSeeder

μœ„ λͺ…λ Ήμ–΄λ₯Ό 치면 database/seeds ν•˜μœ„μ— 생성이 되고 클래슀 이름은 자유둭게 μ§€μœΌλ©΄ λœλ‹€. 클래슀 λ‚΄λΆ€μ˜ run()λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ μ‹œλ”©μ΄ 이루어지기 λ•Œλ¬Έμ— μ‹œλ”© λ‘œμ§μ„ λ„£μ–΄μ£Όλ©΄ λœλ‹€.

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        App\User::create([
            'name'=> sprintf('%s %s',str_random(3), str_random(4)),
            'email' => str_random(10) . '@example.com',
            'password' => bcrypt('password'),
        ]);
    }
}

λ§ˆμŠ€ν„° μ‹œλ”

λͺ¨λΈλ§ˆλ‹€ μ•„ν‹°μ¦Œ μ‹œλ”© λͺ…령을 μˆ˜ν–‰ν•˜λŠ” 것은 번거둭기 λ•Œλ¬Έμ— μ‹œλ” 클래슀λ₯Ό ν•œλ²ˆμ— 등둝할 수 μžˆλŠ” λ§ˆμŠ€ν„° μ‹œλ” 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 νŽΈν•˜κ³  이λ₯Ό μ΄μš©ν•΄μ„œ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” μ‹œλ”©μ˜ μˆœμ„œλ•Œλ¬Έμ΄λ‹€. 각 ν…Œμ΄λΈ”κ°„μ˜ 연관관계가 μ—†λ‹€λ©΄ λͺ¨λ₯΄κ² μ§€λ§Œ μ‘΄μž¬ν•œλ‹€λ©΄ μ‹œλ”©ν•˜λŠ” μˆœμ„œλ„ μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. (μ—†λŠ” μ»¬λŸΌμ— μ’…μ†λœ μ»¬λŸΌμ€ μ‚½μž…μ΄ λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—)

class DatabaseSeeder extends Seeder{
    public function run(){
        if(config('database.default') !== 'sqlite'){
            DB::statement('SET FOREIGN_KEY_CHECKS=0');
        }

        //Model::unguard();

        App\User::truncate();
        $this->call(UsersTableSeeder::class);

        App\Article::truncate();
        $this->call(ArticlesTableSeeder::class);

        //Model::reguard();

        if(config('database.default') !== 'sqlite'){
            DB::statement('SET FOREIGN_KEY_CHECKS=1');
        }
    }
}

Model::unguard()와 Model::reguard() λ©”μ„œλ“œλŠ” μ—˜λ‘œν€€νŠΈ λͺ¨λΈμ— μ •μ˜ν•œ λŒ€λŸ‰ ν• λ‹Ή μ œμ•½ 사항을 ν’€μ—ˆλ‹€κ°€ μž κ·ΈλŠ” λͺ…λ ΉμœΌλ‘œ 라라벨5.2이상은 μ‹œλ”©ν•  λ•Œ μžλ™μœΌλ‘œ ν’€κ³  μž κ·Όλ‹€.

  • config('database.default') : config/database.phpνŒŒμΌμ—μ„œ default킀에 ν• λ‹Ήλœ 값을 μ½μ–΄μ˜€λŠ” ꡬ문으둜 dbμ’…λ₯˜κ°€ λ°˜ν™˜λœλ‹€. sqliteλŠ” μ™ΈλΆ€ν‚€λ₯Ό κΊΌλ‘λŠ” κΈ°λŠ₯을 μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ˜ˆμ™Έμ²˜λ¦¬ν•œ ꡬ문

  • truncate() : ν…Œμ΄λΈ”μ— λ‹΄κΈ΄ λͺ¨λ“  데이터λ₯Ό λ²„λ¦¬λŠ” λ©”μ„œλ“œλ‘œ, delete()와 같을 수 μžˆμ§€λ§Œ μ΄λŠ” κΈ°λ³Έν‚€λ₯Ό 1둜 μž¬λ°°μ—΄ν•œλ‹€.

  • call() : $class::run() λ©”μ„œλ“œμ˜ 본문을 μ‹€ν–‰ν•˜κ³  μ½˜μ†”μ— κ²°κ³Όλ₯Ό 좜λ ₯ν•œλ‹€.

php artisan db:seed둜 λ§ˆμŠ€ν„° μ‹œλ“œλ₯Ό μ‹œλ”©ν•  수 μžˆλ‹€.

php artisan migrate:refresh --seed : λ§ˆμ΄κ·Έλ ˆμ΄μ…˜κ³Ό μ‹œλ”©μ„ ν•œλ²ˆμ— μ‹€ν–‰

Last updated