seeder 로 data 를 삽입하는 방법
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