数据库播种

数据库播种是一种将数据添加到数据库的简单方法。它在开发过程中特别有用,在开发过程中需要使用样本数据来进行开发,但并不局限于此。播种器可以包含您不想包含在迁移中的静态数据,例如国家/地区或地理编码表、事件或设置信息等。

数据库播种器

数据库种子器是简单的类,必须具有一个 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 选项来提供种子文件将存储的 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 选项将覆盖目标目录中已有的文件。