データベースシーディング
データベースシーディングは、データベースにデータを追加する簡単な方法です。開発中に、開発の基になるサンプルデータでデータベースを設定する必要がある場合に特に役立ちますが、それだけには限定されません。シーダーには、国、ジオコーディングテーブル、イベントまたは設定情報など、マイグレーションに含めたくない静的データを含めることができます。
データベースシーダー
データベースシーダーは、`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' => '[email protected]',
];
// 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');
コマンドラインシーディング
専用のコントローラーを作成したくない場合は、コマンドラインからマイグレーション CLI ツールの一部としてデータをシードすることもできます
php spark db:seed TestSeeder
シーダーファイルの作成
コマンドラインを使用して、シードファイルを簡単に生成できます
php spark make:seeder user --suffix
上記のコマンドは、**app/Database/Seeds** ディレクトリにある **UserSeeder.php** ファイルを出力します。
`--namespace` オプションを指定することで、シードファイルが格納されるルート名前空間を指定できます
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` オプションを指定すると、宛先にある既存のファイルが上書きされます。