brad-denver/paris-seeder

使用Faker数据集和Paris模型的一个简单数据库种子类

v0.0.1 2014-09-03 04:55 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:47:26 UTC


README

使用Faker数据集和Paris模型的一个简单数据库种子类

示例语法

Seeder::seed('Seeds\Roles', 2, null, function($record) {
  Seeder::seed('Seeds\Users', 2, array('role_id'=>$record->id));
});

上述示例将创建两个角色和每个角色下的两个用户。

安装和配置

安装paris-seeder及其依赖项(fakeridiormparis)最简单的方法是通过Composer。此类通过Packagist提供,供应商和包标识为brad-denver/paris-seeder

Paris-seeder本身不需要任何配置,但以下步骤显示了如何配置Idiorm和设置Paris模型以供使用。

示例Idiorm配置

ORM::configure('mysql:host=localhost;dbname=my_database');
ORM::configure('username', 'database_user');
ORM::configure('password', 'top_secret');

示例

假设我们将为roles表进行种子操作

users

两个表都具有自动递增的id字段。

Paris模型

首先,我们需要为每个表创建类,这些类扩展了Paris Model类

namespace Seeds;

class Roles extends \Model {

  /*
  * use the Paris filter pattern to create a new fake record
  */
  public function create_fake($orm, $faker) {
    $orm->create(array(
      'title' => $faker->word
    ));
    return $orm;
  }
}

class Users extends \Model {

  /*
  * use the Paris filter pattern to create a new fake record
  */
  public function create_fake($orm, $faker) {
    $orm->create(array(
      'name' => $faker->name,
      'role_id' => $faker->randomDigit
    ));
    return $orm;
  }
}

这里的关键是模型具有一个接受Idiorm ORM实例和Faker\Generator实例的create_fake方法,并返回由$orm->create生成的记录。

Seeder::seed

种子方法期望

  • 一个Paris模型实例(或用于创建一个的字符串/)
  • 要插入的记录数(默认为1)
  • 可选数据,以覆盖由faker在create_fake中提供的数据
  • 可选回调,用于插入的记录(它将传递新记录和faker实例)
  • 可选的Faker/Generator实例来生成假数据(如果省略,将创建一个新实例)基本示例。
Seeder::seed('Seeds\Users', 5);

覆盖faker数据。

Seeder::seed('Seeds\Users', 5, array('role_id'=>2));

提供回调。

Seeder::seed('Seeds\Roles', 2, null, function($record) {
  Seeder::seed('Seeds\Users', 5, array('role_id'=>$record->id));
});

提供faker生成器

$faker = Faker\Factory::create('fr_FR'); // create a French faker
Seeder::seed('Seeds\Users', 5, null, null, $faker);

Seeder::replicate

有时可能不需要为某个表使用假数据。Seeder::replicate是一个辅助方法,用于将一个表的所有数据复制到另一个表(假设它们具有兼容的模式)。

// a paris model pointing to our production roles table
$source_model = Model::factory('Roles', 'remote');
// a paris model pointing to our dev roles table that needs to mirror production
$target_model = Model::factory('Roles', 'local');
Seeder::replicate($source_model, $target_model);

Seeder::delete_all

正如其名所示,此方法简单删除给定模型表中的所有记录。它是Seeder::replicateSeeder::delete_all_and_seed的第一个步骤。

Seeder::delete_all('Seeds\Users');

Seeder::delete_all_and_seed

这是一个用于在表中删除和重新生成所有数据的常见用例的辅助方法。此方法简单地调用Seeder::delete_all,然后调用Seeder:seed以给定模型。它接受与Seeder:seed相同的参数。

Seeder::delete_all_and_seed('Seeds\Users', 5);