データベースシーディング

データベースシーディングは、データベースにデータを追加する簡単な方法です。開発中に、開発の基になるサンプルデータでデータベースを設定する必要がある場合に特に役立ちますが、それだけには限定されません。シーダーには、国、ジオコーディングテーブル、イベントまたは設定情報など、マイグレーションに含めたくない静的データを含めることができます。

データベースシーダー

データベースシーダーは、`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` オプションを指定すると、宛先にある既存のファイルが上書きされます。