데이터베이스 시딩
데이터베이스 시딩은 데이터베이스에 데이터를 추가하는 간단한 방법입니다. 개발 중에 샘플 데이터로 데이터베이스를 채워야 할 때 특히 유용하지만, 이에 국한되지 않습니다. 시더에는 국가, 지오코딩 테이블, 이벤트 또는 설정 정보 등 마이그레이션에 포함하고 싶지 않은 정적 데이터를 담을 수 있습니다.
데이터베이스 시더
데이터베이스 시더는 run()메서드가 있어야 하며 CodeIgniter\Database\Seeder를 확장하는 간단한 클래스입니다. run()내에서 필요한 모든 형태의 데이터를 생성할 수 있습니다. $this->db와 $this->forge를 통해 각각 데이터베이스 연결과 Forge에 접근할 수 있습니다. 시드 파일은 app/Database/Seeds 디렉토리에 저장해야 하며, 파일 이름은 클래스 이름과 일치해야 합니다.
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class SimpleSeeder extends Seeder
{
public function run()
{
$data = [
'username' => 'darth',
'email' => 'darth@theempire.com',
];
// Simple Queries
$this->db->query('INSERT INTO users (username, email) VALUES(:username:, :email:)', $data);
// Using Query Builder
$this->db->table('users')->insert($data);
}
}
시더 중첩
시더는 call()메서드를 사용하여 다른 시더를 호출할 수 있습니다. 이를 통해 중앙 시더를 쉽게 구성하고 작업을 별도의 시더 파일로 나눌 수 있습니다:
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class TestSeeder extends Seeder
{
public function run()
{
$this->call('UserSeeder');
$this->call('CountrySeeder');
$this->call('JobSeeder');
}
}
call()메서드에서 완전한 클래스 이름을 사용할 수도 있어, 오토로더가 찾을 수 있는 어디에나 시더를 둘 수 있습니다. 보다 모듈화된 코드베이스에 적합합니다:
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class SimpleSeeder extends Seeder
{
public function run()
{
$this->call('UserSeeder');
$this->call('My\Database\Seeds\CountrySeeder');
}
}
시더 사용
데이터베이스 설정 클래스를 통해 메인 시더 인스턴스를 가져올 수 있습니다:
<?php
$seeder = \Config\Database::seeder();
$seeder->call('TestSeeder');
다른 데이터베이스 그룹 사용
시더 인스턴스를 가져올 때 첫 번째 매개변수로 그룹 이름을 전달하여 다른 데이터베이스 그룹을 지정할 수 있습니다:
<?php
$seeder = \Config\Database::seeder('group_name');
$seeder->call('TestSeeder');
call()을 사용하여 자식 시더를 실행할 때 데이터베이스 연결이 자동으로 전달됩니다. 즉, 자식 시더가 자체 $DBGroup속성을 명시적으로 지정하지 않는 한 부모 시더와 동일한 연결을 사용합니다.
시더가 부모 시더의 연결과 상관없이 항상 특정 데이터베이스 그룹을 사용해야 하는 경우, 시더 클래스에서 $DBGroup속성을 설정할 수 있습니다:
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class UserSeeder extends Seeder
{
protected $DBGroup = 'group_name';
public function run()
{
// ...
}
}
연결 우선순위는 다음과 같습니다:
시더 클래스에
$DBGroup이 설정된 경우 해당 연결 그룹이 항상 사용됩니다그렇지 않으면,
call()을 통한 부모 시더 또는Database::seeder()에서 연결이 전달된 경우 해당 연결이 사용됩니다그렇지 않으면 기본 연결 그룹이 사용됩니다
커맨드 라인 시딩
전용 컨트롤러를 만들지 않으려면 마이그레이션 CLI 도구의 일부로 커맨드 라인에서 데이터를 시딩할 수도 있습니다:
php spark db:seed TestSeeder
시더 파일 생성
커맨드 라인을 사용하여 시드 파일을 쉽게 생성할 수 있습니다:
php spark make:seeder user --suffix
위 명령어는 app/Database/Seeds 디렉토리에 UserSeeder.php 파일을 생성합니다.
--namespace옵션을 제공하여 시드 파일이 저장될 root 네임스페이스를 지정할 수 있습니다:
Unix의 경우:
php spark make:seeder MySeeder --namespace Acme\\Blog
Windows의 경우:
php spark make:seeder MySeeder --namespace Acme\Blog
Acme\Blog가 app/Blog 디렉토리에 매핑된 경우 이 명령어는 app/Blog/Database/Seeds 디렉토리에 MySeeder.php를 생성합니다.
--force옵션을 제공하면 대상 경로의 기존 파일을 덮어씁니다.