ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • seeder 로 data 를 삽입하는 방법
    백엔드/laravel 2024. 1. 13. 19:04

    1. 컬렉션 사용해 테이터 삽입

        database\seeders\PostSeeder.php
        -------------------------------
        namespace Database\Seeders;

        use App\Models\Post;
        use Illuminate\Database\Console\Seeds\WithoutModelEvents;
        use Illuminate\Database\Seeder;

        class PostSeeder extends Seeder
        {
            /**
            * Run the database seeds.
            */
            public function run(): void
            {
                $posts = collect([
                    [
                        'title' => 'Post One',
                        'slug' => 'post-one',
                        'excerpt' => 'Excerpt of Post One',
                        'description' => 'Description of Post One',
                        'is_published' => true,
                        'min_to_read' => 2
                    ],
                    [
                        'title' => 'Post Two',
                        'slug' => 'post-two',
                        'excerpt' => 'Excerpt of Post Two',
                        'description' => 'Description of Post Two',
                        'is_published' => true,
                        'min_to_read' => 2,
                    ]
                ]);

                $posts->each(function ($post) {
                    Post::create($post); <= created_at 및 updated_at 있을 경우 자동 생성 (O)
                    Post::insert($post); <= created_at 및 updated_at 있을 경우 자동 생성 (X)
                });
            }
        }

        
        database\seeders\DatabaseSeeder.php
        -----------------------------------
        namespace Database\Seeders;

        // use Illuminate\Database\Console\Seeds\WithoutModelEvents;
        use Illuminate\Database\Seeder;

        class DatabaseSeeder extends Seeder
        {
            /**
            * Seed the application's database.
            */
            public function run(): void
            {
                $this->call(PostSeeder::class);
            }
        }

       실행 1
       php artisan db:seed;

       실행 2
       php artisan migrate:refresh --seed;



    2. Json 파일을 사용해 데이터 입력
       임의의 데이터를 database\json\post.json 파일 생성[
        [
            {
                "title": "Post One through Seeder",
                "slug": "post-one-through-seeder",
                "excerpt": "Just a Excerpt..",
                "description": "Just a Description..",
                "is_published": true,
                "min_to_read": 4
            },
            {
                "title": "Post Two through Seeder",
                "slug": "post-two-through-seeder",
                "excerpt": "Just a Excerpt..",
                "description": "Just a Description..",
                "is_published": true,
                "min_to_read": 4
            }
        ]


        database\seeders\PostSeeder.php
        -------------------------------
        namespace Database\Seeders;

        use App\Models\Post;
        use Illuminate\Database\Console\Seeds\WithoutModelEvents;
        use Illuminate\Database\Seeder;
        use Illuminate\Support\Facades\File;

        class PostSeeder extends Seeder
        {
            /**
            * Run the database seeds.
            */
            public function run(): void
            {
                $json = File::get(path: 'database/json/posts.json');
                $posts = collect(json_decode($json));

                $posts->each(function ($post) {
                    Post::insert([
                        "title" => $post->title,
                        "slug" => $post->slug,
                        "excerpt" => $post->excerpt,
                        "description" => $post->description,
                        "is_published" => $post->is_published,
                        "min_to_read" => $post->min_to_read
                    ]);
                });
            }
        }    

        실행
        php artisan migrate:refresh --seed;


    3. 여러 시더 호출

        database\seeders\DatabaseSeeder.php
        -----------------------------------

        namespace Database\Seeders;

        // use Illuminate\Database\Console\Seeds\WithoutModelEvents;
        use Illuminate\Database\Seeder;

        class DatabaseSeeder extends Seeder
        {
            /**
            * Seed the application's database.
            */
            public function run(): void
            {
                $this->call([
                    PostsTableSeeder::class,
                    UsersTableSeeder::class
                ]);
            }
        }

        실행
        php artisan migrate:refresh --seed

    댓글

Designed by Tistory.