tawenxi/iseed

根据现有数据库表的数据生成新的Laravel数据库种子文件。

1.1 2017-10-09 08:57 UTC

This package is not auto-updated.

Last update: 2024-09-21 16:51:38 UTC


README

逆种子生成器(iSeed)是一个Laravel包,提供了一种基于现有数据库表数据生成新种子文件的方法。

Build Status Latest Stable Version Total Downloads Analytics

安装

  1. tawenxi/iseed添加到您的composer文件中。

Laravel 5

对于Laravel 5的安装,编辑您项目的composer.json文件以需要tawenxi/iseed

"require": {
	"tawenxi/iseed": "dev-master"
}

Laravel 5版本低于5.3.8

对于版本低于5.3.8的Laravel 5,编辑您项目的composer.json文件以需要2.2版本。

"require": {
	"tawenxi/iseed": "2.2"
}

Laravel 4

如果您想在Laravel 4上安装它,则应需要1.1版本。

"require": {
	"tawenxi/iseed": "1.1"
}
  1. 从CLI更新Composer

    composer update

Laravel 5版本低于5.5

  1. 通过打开app/config/app.php文件并添加到providers数组中添加服务提供者。

    tawenxi\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

可选参数,用于指定在播种完成后要触发的事件名称。如果事件监听器返回false,播种将执行,但会抛出一个异常,表示执行后失败。您可以通过传递逗号分隔的数据库表名数组以及相应的逗号分隔的事件名称数组来为多个表名分配多个执行后操作。

示例:以下命令将创建一个种子文件,在播种完成后触发名为'someEvent'的事件。

artisan iseed users --postrun=someEvent

以下示例将someUserEvent分配给users表的种子,并将someGroupEvent分配给groups表的种子,以在播种后执行。

artisan iseed users,groups --postrun=someUserEvent,someGroupEvent

以下示例仅将someGroupEvent分配给groups表的种子,以在播种后执行。此处省略了users表执行后的值,因此users表的种子将没有分配执行后事件。

artisan iseed users,groups --postrun=,someGroupEvent

noindex

使用--noindex选项可以生成非索引数组格式的种子。此功能的用例是在需要合并两个种子文件时。

示例

artisan iseed users --noindex

用法

要为您用户的表生成种子文件,只需调用:\Iseed::generateSeed('users', 'connectionName', 'numOfRows');connectionNamenumOfRows不是必需的参数。

这将在/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表具有大量列的一些极端情况下更改块大小值,因此块大小在iSeed的config.php文件中是可配置的。

'chunk_size' => 500 // Maximum number of rows per insert statement