leuzeus / iseed
这是 Orangehill/Iseed 原始包 SchuBu/iseed 的一个分支。基于现有数据库表数据生成新的 Laravel 数据库种子文件。
Requires
- php: ^7.2|^8.0.2
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- illuminate/filesystem: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- laravel/framework: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- mockery/mockery: ^1.0.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-10-01 17:48:58 UTC
README
**这是对 https://github.com/cheesegrits/iseed(orangehill/iseed 的分支,更新了一些内容并添加了 iseed:all 命令)的另一个分支**
逆向种子生成器(Iseed) 是一个 Laravel 包,提供了一种基于现有数据库表数据生成新种子文件的方法。
安装
1. 使用 Composer 需要
$ composer require SchuBu/iseed
Laravel 5.3.7 及以下 或 Laravel 4 需要指定版本。
$ composer require SchuBu/iseed:2.2 # Laravel 5.3.7 and below $ composer require SchuBu/iseed:1.1 # Laravel 4
2. 添加服务提供者(Laravel 5.4 及以下)
最新版本的 Laravel 具有自动发现和自动添加服务提供者的功能 - 如果您使用的是 5.4.x 及以下版本,请记住将其添加到 providers
数组中的 /app/config/app.php
// ... SchuBu\Iseed\IseedServiceProvider::class,
Artisan 命令
Iseed 包含两个 artisan 命令
php artisan iseed
php artisan iseed:all
php artisan iseed
$ php artisan iseed --help Description: Generate seed file from table Usage: iseed [options] [--] <tables> Arguments: tables comma separated string of table names Options: --clean clean iseed section --force force overwrite of all existing seed classes --database[=DATABASE] database connection [default: "mysql"] --max[=MAX] max number of rows --chunksize[=CHUNKSIZE] size of data chunks for each insert query --exclude[=EXCLUDE] exclude columns --prerun[=PRERUN] prerun event name --postrun[=POSTRUN] postrun event name --dumpauto[=DUMPAUTO] run composer dump-autoload [default: true] --noindex no indexing in the seed --orderby[=ORDERBY] orderby desc by column --direction[=DIRECTION] orderby direction --classnameprefix[=CLASSNAMEPREFIX] prefix for class and file name --classnamesuffix[=CLASSNAMESUFFIX] suffix for class and file name
php artisan iseed:all
$ php artisan iseed:all --help Description: Generate seed files for all tables except migrations Usage: iseed:all [options] Options: --force
Artisan 命令选项
主要的 artisan 命令(php artisan iseed
)包含一系列参数(一些是必需的,一些是可选的),您可以在调用命令时使用。
[table_name]
必需参数,定义了哪些表将被用于种子创建。使用 CSV 表示法为多个表。将为每个表生成种子文件。
示例
$ php artisan iseed my_table
$ php artisan iseed my_table,another_table
类名前缀 & 类名后缀
可选参数,用于指定 Seeder 类名和文件名的前缀或后缀。如果您想为已有种子的表创建额外的种子而不覆盖现有种子,这非常有用。
示例
$ php artisan iseed my_table --classnameprefix=Customized
输出 CustomizedMyTableSeeder.php
$ php artisan iseed my_table,another_table --classnameprefix=Customized
输出 CustomizedMyTableSeeder.php
和 CustomizedAnotherTableSeeder.php
$ php artisan iseed my_table --classnamesuffix=Customizations
输出 MyTableCustomizationsSeeder.php
$ php artisan iseed my_table,another_table --classnamesuffix=Customizations
输出 MyTableCustomizationsSeeder.php
和 AnotherTableCustomizationsSeeder.php
强制
可选参数,用于自动覆盖所需表的任何现有种子。
示例:以下命令将覆盖 Laravel 种子目录中已存在的 UsersTableSeeder.php
。
$ php artisan iseed users --force
dumpauto
可选布尔参数,用于控制 composer dump-autoload
命令的执行。默认为 true
。
示例:以下命令将阻止 composer dump-autoload
执行
$ php artisan iseed users --dumpauto=false
清理
可选参数,将在创建新的种子类之前清理 app/database/seeders/DatabaseSeeder.php
。
示例
$ php artisan iseed users --clean
数据库
可选参数,指定数据库连接名称。
示例
$ php artisan iseed users --database=mysql2
最大值
可选参数,定义从指定表种化的最大条目数。在多个表的情况下,限制将应用于所有表。
示例
$ php artisan iseed users --max=10
分块大小
可选参数,定义每个插入查询的数据块大小。
示例
$ php artisan iseed users --chunksize=100
请注意,一些用户在导出大型 DB 表时遇到了问题。该问题通过将输入数据拆分为更小的元素块来解决,每个插入语句包含这些元素。在某些极端情况下,如果数据库表有大量记录,您可能需要更改块大小值。块大小可以在 Iseed 的 config.php
文件或通过 artisan
命令进行配置。
排序
可选参数,定义将用于排序结果的列,当与允许您设置所需导出数据库条目数量的 max 参数一起使用时。
示例
$ php artisan iseed users --max=10 --orderby=id
方向
可选参数,允许您设置结果排序的方向;与orderby参数一起使用。
示例
$ php artisan iseed users --max=10 --orderby=id --direction=desc
exclude
可选参数,接受一个逗号分隔的列名列表,您希望从要导出的表中排除这些列。在存在多个表的情况下,排除将应用于所有表。
示例
$ php artisan iseed users --exclude=id $ php artisan iseed users --exclude=id,created_at,updated_at
prerun
可选参数,将laravel事件名称分配给在播种之前要触发的事件。如果事件监听器返回false
,则播种将自动失败。您可以通过传递逗号分隔的DB名称数组以及相应地传递逗号分隔的prerun事件名称数组来为多个表名分配多个prerun。
示例:以下命令将创建一个在播种之前触发名为someEvent
的事件的播种文件。
$ php artisan iseed users --prerun=someEvent
以下示例将someUserEvent
分配给users
表播种,将someGroupEvent
分配给groups
表播种,并在播种之前执行。
$ php artisan iseed users,groups --prerun=someUserEvent,someGroupEvent
以下示例仅将someGroupEvent
分配给groups
表播种,并在播种之前执行。这里省略了users表的prerun值,因此users
表的播种将没有分配prerun事件。
$ php artisan iseed users,groups --prerun=,someGroupEvent
postrun
可选参数,将laravel事件名称分配给在播种之后要触发的事件。如果事件监听器返回false
,则播种将被执行,但将抛出一个异常,表明postrun失败。您可以通过传递逗号分隔的DB名称数组以及相应地传递逗号分隔的postrun事件名称数组来为多个表名分配多个postrun。
示例:以下命令将创建一个在播种完成后触发名为someEvent
的事件的播种文件。
$ php artisan iseed users --postrun=someEvent
以下示例将someUserEvent
分配给users
表播种,将someGroupEvent
分配给groups
表播种,并在播种后执行。
$ php artisan iseed users,groups --postrun=someUserEvent,someGroupEvent
以下示例仅将someGroupEvent
分配给groups
表播种,并在播种后执行。这里省略了users表的postrun值,因此users
表的播种将没有分配postrun事件。
$ php artisan iseed users,groups --postrun=,someGroupEvent
noindex
使用--noindex
,播种可以生成非索引数组。此功能的用例是当您需要合并两个播种文件时。
示例
$ php artisan iseed users --noindex
配置
Iseed附带以下配置,要更改默认设置,请先发布配置
$ php artisan vendor:publish --provider="SchuBu\Iseed\IseedServiceProvider" --tag="config"
path
生成播种器的路径。
默认为/database/seeders
。
seeder_path
保存 Seeder 文件的路径。
默认为 /database/seeders/DatabaseSeeder.php
。
seeder_modification
是否应在运行 iseed
命令后修改 Seeder。
默认为true
。
chunk_size
每个插入语句的最大行数。
默认为 500
。
stub_path
您还可以设置一个指向自定义stub文件的相对路径。请确保路径相对于您的项目根目录,例如 'stub_path' => 'stubs/seeder.stub'
或 'stub_path' => './stubs/seeder.stub'
,但 不要 'stub_path' => '/stubs/seeder.stub'
。
默认stub文件位于 /vendor/schubu/iseed/src/SchuBu/Iseed/Stubs/seed.stub
。
insert_command
您可以自定义播种器内部插入之前的那行。
您 必须 保持两个%s
,但是第一个将被表名替换,第二个将被插入本身替换。
默认为 \DB::table('%s')->insert(%s);
。
用法
要为您的单个表生成播种文件,只需调用
\Iseed::generateSeed($tableName);
$tableName
需要定义您表的名字。您还可以传递到generateSeed()
方法的参数,包括
例如,要为您的users
表生成播种,您将调用
\Iseed::generateSeed('users', 'mysql2', 100);
这将创建一个名为 UsersTableSeeder.php
的文件,位于 /database/seeders
文件夹内(对于 Laravel 5 到 7,为 /database/seeds
;对于 Laravel 4,为 /app/database/seeds
),其内容类似于以下示例
<?php // File: /database/seeders/UsersTableSeeder.php namespace Database\Seeders; use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { /** * Auto generated seeder file. * * @return void */ public function run() { \DB::table('users')->delete(); \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/seeders/DatabaseSeeder.php
(对于 Laravel 5 到 7,为 /database/seeds/DatabaseSeeder.php
;对于 Laravel 4,为 /app/database/seeds/DatabaseSeeder.php
)以包含对新创建的种子类的调用。
如果您想定义一个自定义的 Iseed 模板,其中所有调用都将放置在其中,可以这样做。您可以通过在 /database/seeders/DatabaseSeeder.php
(对于 Laravel 5 到 7,为 /database/seeds/DatabaseSeeder.php
;对于 Laravel 4,为 /app/database/seeds/DatabaseSeeder.php
)中的任何位置使用 #iseed_start
和 #iseed_end
模板来实现,例如
<?php // File: /database/seeders/DatabaseSeeder.php namespace Database\Seeders; use Illuminate\Database\Seeder; 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'); } // All generated seeds are added between #iseed_start & #iseed_end. #iseed_start $this->call(UsersTableSeeder::class); #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
。这将在新创建的种子类之前清除模板中的 database/seeders/DatabaseSeeder.php
。
您可以通过使用 artisan 命令选项 --database=connection_name
指定用于创建新种子文件的数据库连接,例如 php artisan iseed users --database=mysql2
。
要限制从表中导出的行数,请使用 artisan 命令选项 --max=number_of_rows
,例如 php artisan iseed users --max=10
。如果您在导出多个表时使用此选项,则指定的限制将适用于所有表。