asamaru7 / iseed
基于现有数据库表的数据生成新的Laravel数据库种子文件。
Requires
- php: >=5.4.0
- illuminate/support: ^5.3.8
Requires (Dev)
- illuminate/filesystem: 5.x
- laravel/framework: ^5.3.8
- mockery/mockery: dev-master
This package is auto-updated.
Last update: 2024-08-29 04:31:07 UTC
README
反向种子生成器(iSeed)是一个Laravel包,它提供了一个基于现有数据库表数据生成新种子文件的方法。
安装
- 将
orangehill/iseed
添加到您的composer文件中。
Laravel 5
对于Laravel 5的安装,编辑您的项目composer.json
文件以要求orangehill/iseed
。
"require": {
"orangehill/iseed": "dev-master"
}
Laravel 5版本低于5.3.8
对于低于5.3.8的Laravel 5版本,编辑您的项目composer.json
文件以要求2.2
版本。
"require": {
"orangehill/iseed": "2.2"
}
Laravel 4
如果您希望在Laravel 4上安装它,则应要求1.1
版本。
"require": {
"orangehill/iseed": "1.1"
}
-
通过CLI更新Composer
composer update
-
通过打开
app/config/app.php
文件并添加新项目到providers
数组来添加服务提供者。Orangehill\Iseed\IseedServiceProvider::class
Artisan命令选项
[table_name]
必需参数,定义用于种子创建的哪个表。使用CSV表示法表示多个表。将为每个表生成种子文件。
示例
php artisan iseed my_table
php artisan iseed my_table,another_table
force
可选参数,用于自动覆盖所需表的任何现有种子。
示例:以下命令将覆盖laravel的种子目录中已存在的UsersTableSeeder.php
。
php artisan iseed users --force
dumpauto
可选布尔参数,控制composer dump-autoload
命令的执行。默认为true。
示例:以下命令将阻止composer dump-autoload
的执行。
php artisan iseed users --dumpauto=false
clean
可选参数,在创建新的种子类之前清理app/database/seeds/DatabaseSeeder.php
。
示例
php artisan iseed users --clean
database
可选参数,指定DB连接名称。
示例
php artisan iseed users --database=mysql2
max
可选参数,定义从指定表种入的最大条目数。在多个表的情况下,限制将应用于所有表。
示例
artisan iseed users --max=10
exclude
可选参数,接受逗号分隔的列列表,您希望从导出的表中排除这些列。在多个表的情况下,排除将应用于所有表。
示例
artisan iseed users --exclude=id
artisan iseed users --exclude=id,created_at,updated_at
prerun
可选参数,将laravel事件名称分配给在种子之前触发的事件。如果事件监听器返回false
,则种子将自动失败。可以通过传递逗号分隔的DB名称数组为多个表名分配多个preruns,并相应地传递逗号分隔的prerun事件名称数组。
示例:以下命令将创建一个种子文件,在种子之前触发名为'someEvent'的事件。
artisan iseed users --prerun=someEvent
以下示例将someUserEvent
分配给users
表的种子,并将someGroupEvent
分配给groups
表的种子,在种子之前执行。
artisan iseed users,groups --prerun=someUserEvent,someGroupEvent
以下示例仅将someGroupEvent
分配给groups
表的种子,在种子之前执行。这里省略了users表的prerun值,因此users
表的种子将没有分配prerun事件。
artisan iseed users,groups --prerun=,someGroupEvent
postrun
可选参数,将laravel事件名称分配给在种子之后触发的事件。如果事件监听器返回false
,则种子将执行,但将抛出一个异常,表示postrun失败。可以通过传递逗号分隔的DB名称数组为多个表名分配多个postruns,并相应地传递逗号分隔的postrun事件名称数组。
示例:以下命令将创建一个种子文件,在种子完成后触发名为'someEvent'的事件。
artisan iseed users --postrun=someEvent
以下示例将把someUserEvent
分配给users
表种子,并将someGroupEvent
分配给groups
表种子,在种子后执行。
artisan iseed users,groups --postrun=someUserEvent,someGroupEvent
以下示例将只将一个someGroupEvent
分配给groups
表种子,在种子后执行。这里省略了users表的postrun值,因此users
表种子将不会有postrun事件分配。
artisan iseed users,groups --postrun=,someGroupEvent
用法
要生成用户表的种子文件,只需调用:\Iseed::generateSeed('users', 'connectionName', 'numOfRows');
。其中connectionName
和numOfRows
不是必需参数。
这将在/database/seeds
目录下创建一个文件(对于Laravel 4,为/app/database/seeds
),其内容类似于以下示例
<?php
// File: /database/seeds/UsersTableSeeder.php
class UsersTableSeeder extends Seeder {
/**
* Auto generated seed file
*
* @return void
*/
public function run()
{
\DB::table('users')->truncate();
\DB::table('users')->insert(array (
0 =>
array (
'id' => '1',
'email' => 'admin@admin.com',
'password' => '$2y$10$tUGCkQf/0NY3w1l9sobGsudt6UngnoVXx/lUoh9ElcSOD0ERRkK9C',
'permissions' => NULL,
'activated' => '1',
'activation_code' => NULL,
'activated_at' => NULL,
'last_login' => NULL,
'persist_code' => NULL,
'reset_password_code' => NULL,
'first_name' => NULL,
'last_name' => NULL,
'created_at' => '2013-06-11 07:47:40',
'updated_at' => '2013-06-11 07:47:40',
),
1 =>
array (
'id' => '2',
'email' => 'user@user.com',
'password' => '$2y$10$ImNvsMzK/BOgNSYgpjs/3OjMKMHeA9BH/hjl43EiuBuLkZGPMuZ2W',
'permissions' => NULL,
'activated' => '1',
'activation_code' => NULL,
'activated_at' => NULL,
'last_login' => '2013-06-11 07:54:57',
'persist_code' => '$2y$10$C0la8WuyqC6AU2TpUwj0I.E3Mrva8A3tuVFWxXN5u7jswRKzsYYHK',
'reset_password_code' => NULL,
'first_name' => NULL,
'last_name' => NULL,
'created_at' => '2013-06-11 07:47:40',
'updated_at' => '2013-06-11 07:54:57',
),
));
}
}
此命令还将更新/database/seeds/DatabaseSeeder.php
(对于Laravel 4,为/app/database/seeds/DatabaseSeeder.php
)以包含对新生成的种子类的调用。
如果您愿意,可以定义自定义iSeed模板,其中所有调用都将放置。您可以通过在/database/seeds/DatabaseSeeder.php
(对于Laravel 4,为/app/database/seeds/DatabaseSeeder.php
)的任何地方使用#iseed_start
和#iseed_end
模板来完成此操作,例如
<?php
// File: /database/seeds/DatabaseSeeder.php
class DatabaseSeeder extends Seeder {
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Eloquent::unguard();
if(App::environment() == "local")
{
throw new \Exception('Only run this from production');
}
#iseed_start
// here all the calls for newly generated seeds will be stored.
#iseed_end
}
}
或者您可以通过使用Artisan从命令行运行Iseed,例如php artisan iseed users
。对于生成多个种子文件,应该将表名以逗号分隔的列表作为命令的参数发送,例如php artisan iseed users,posts,groups
。
如果您尝试生成已存在的种子文件,命令将询问您是否要覆盖它。如果您愿意默认覆盖它,请使用Artisan命令选项--force
,例如php artisan iseed users --force
。
如果您愿意清除iSeed模板,可以使用Artisan命令选项--clean
,例如php artisan iseed users --clean
。这将在创建新的种子类之前从app/database/seeds/DatabaseSeeder.php
中清除模板。
您可以使用Artisan命令选项--database=connection_name
指定用于创建新种子文件的数据库连接,例如php artisan iseed users --database=mysql2
。
要限制从表中导出的行数,请使用Artisan命令选项--max=number_of_rows
,例如php artisan iseed users --max=10
。如果您在导出多个指定表时使用此选项,则将应用此限制。
要(重新)种植数据库,请转到终端并运行Laravel的db:seed命令
(php artisan db:seed
)。
请注意,一些用户在大型DB表导出时遇到了问题(从具有许多记录的表进行播种时的错误)。通过将输入数据分成更小的元素块(每个插入语句一个)来分割输入数据已解决这个问题。由于您可能需要在具有大量列的DB表的一些极端情况下更改块大小值,因此块大小在iSeed的config.php
文件中是可配置的。
'chunk_size' => 500 // Maximum number of rows per insert statement