brad-denver / paris-seeder
使用Faker数据集和Paris模型的一个简单数据库种子类
Requires
- php: >=5.3.3
- fzaninotto/faker: 1.*
- j4mie/idiorm: 1.*
- j4mie/paris: 1.*
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及其依赖项(faker,idiorm,paris)最简单的方法是通过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::replicate
和Seeder::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);