这是基于原始包 Orangehill/Iseed 的 SchuBu/iseed 的分支。根据现有数据库表数据生成新的 Laravel 数据库种子文件。

维护者

详细信息

github.com/cheesegrits/iseed

来源

v4.0.5 2024-03-25 04:15 UTC

This package is auto-updated.

Last update: 2024-09-25 05:44:35 UTC


README

这是我对 orangehill/iseed 的分支。 我更新了一些内容并添加了 iseed:all 命令。

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

Build Status Latest Stable Version Total Downloads Analytics

安装

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 及以下版本,请记住将其添加到 /app/config/app.php 中的 providers 数组中

// ...
SchuBu\Iseed\IseedServiceProvider::class,

Artisan 命令

Iseed 包含两个 artisan 命令

  1. php artisan iseed
  2. 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.phpCustomizedAnotherTableSeeder.php

$ php artisan iseed my_table --classnamesuffix=Customizations

输出 MyTableCustomizationsSeeder.php

$ php artisan iseed my_table,another_table --classnamesuffix=Customizations

输出 MyTableCustomizationsSeeder.phpAnotherTableCustomizationsSeeder.php

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/seeders/DatabaseSeeder.php

示例

$ php artisan iseed users --clean

database

可选参数,指定 DB 连接名称。

示例

$ php artisan iseed users --database=mysql2

max

可选参数,定义从指定表中种入的最大条目数。对于多个表,限制将应用于所有表。

示例

$ php artisan iseed users --max=10

chunksize

可选参数,定义每个插入查询的数据块大小。

示例

$ php artisan iseed users --chunksize=100

请注意,一些用户在处理大型 DB 表导出时遇到了问题。该问题通过将输入数据分成更小的元素块来解决,每个插入语句一个。在某些极端情况下,当 DB 表有大量记录时,可能需要更改块大小值,块大小可在 Iseed 的 config.php 文件或通过 artisan 命令中配置。

orderby

可选参数,定义用于按列排序结果所使用的列,当与允许您设置所需导出数据库条目数的 max 参数一起使用时。

示例

$ php artisan iseed users --max=10 --orderby=id

direction

可选参数,允许您设置结果的排序方向;与 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,则播种将自动失败。您可以通过传递以逗号分隔的数据库名称数组以及相应地传递以逗号分隔的事件名称数组来为多个表名分配多个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失败。您可以通过传递以逗号分隔的数据库名称数组以及相应地传递以逗号分隔的事件名称数组来为多个表名分配多个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',但not '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);

这将创建一个位于/database/seeders文件夹中的文件(Laravel 5到7为/database/seeds,Laravel 4为/app/database/seeds),文件名为UsersTableSeeder.php,内容类似于以下示例

<?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

如果您尝试生成一个已存在的种子文件,命令会询问您是否要覆盖它。如果您希望默认覆盖它,请使用 --force artisan 命令选项,例如 php artisan iseed users --force

如果您想清除 Iseed 模板,可以使用 --clean artisan 命令选项,例如 php artisan iseed users --clean。这将在新创建种子类之前从 database/seeders/DatabaseSeeder.php 清除模板。

您可以通过使用 --database=connection_name artisan 命令选项指定用于创建新种子文件的数据库连接,例如 php artisan iseed users --database=mysql2

要限制从表中导出的行数,请使用 --max=number_of_rows artisan 命令选项,例如 php artisan iseed users --max=10。如果您在导出多个表时使用此选项,指定的限制将适用于所有表。