데이터베이스 테이블에 데이터를 심는 행위를 시딩(seeding)이라 한다.

시더만들기

php artisan make:seeder UsersTableSeeder

시더 작성하기

datablses/seeders/UserTableSeeder.php

    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'),
        ]);
    }

시더 실행하기

php artisan db:seed --class=UsersTableSeeder

데이터가 심어졌다.


시더 작성 수정하기(모델 팩토리)

datablses/seeders/UserTableSeeder.php

    public function run()
    {
    	factory(App\User::class, 50)->create();
    }
php artisan db:seed --class=UsersTableSeeder

or

php artisan db:seed

users 테이블에 50개의 데이터가 심어졌다.


1부 완료

아래는 마이그레이션과 시딩작업을 같이 하는 내용


모델 팩토리 추가

dababase/factories/ModelFactory.php

$factory->define(App\User::class, function (Faker\Generator $faker) {
    //static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => bcrypt('password'),
        //'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});
$factory->define(App\Article::class, function (Faker\Generator $faker) {
	$date = $faker->dateTimeThisMonth;

	return [
		'title' => $faker->sentence(),
		'content' =>$faker->paragraph(),
		'created_at' => $date,
		'updated_at' => $date,

	];
});

articles 테이블 시더 뼈대 코드 만들기

php artisan make:seeder ArticlesTableSeeder

소스작성

    public function run()
    {
        $users = App\User::all();

        $users->each(function ($user){
        	$user->articles()->save(
        		factory(App\Article::class)->make()
        	);
        });
    }

마스터 시더 수정

database/seeds/DatebaseSeeder.php

    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');
        }

마스터 시더는 외래키 설정으로 인해 순서대로 시딩해줘야 한다. 그래야 오류가 없다.


데이터 베이스 시딩

php artisan db:seed

마이그레이션과 시딩

마이그레이션과 시딩을 한꺼번에 해준다.

php artisan migrate:refresh --seed

'라라벨 > 시더' 카테고리의 다른 글

가짜데이터 맨뒤 점 없애기  (0) 2020.03.30
가짜 유저 추가  (0) 2020.03.30
마스터시더  (0) 2019.05.27
간단하게 데이터를 삽입하는 시더만들기  (0) 2019.05.25

+ Recent posts