tingfeng-key/lumen-iseed

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

dev-master 2019-04-28 02:07 UTC

This package is auto-updated.

Last update: 2021-06-08 01:04:23 UTC


README

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

Build Status Latest Stable Version Total Downloads Analytics

安装

2. 添加服务提供者(Laravel 5.4 及以下版本)

最新版本的 Laravel 支持自动发现和自动添加服务提供者——如果你使用的是 5.4.x 及以下版本,请记住将其添加到 /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

classnameprefix & classnamesuffix

可选参数,用于指定 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

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

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

示例

php artisan iseed users --max=10

chunksize

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

示例

php artisan iseed users --chunksize=100

exclude

可选参数,接受以逗号分隔的列列表,您希望从导出的表中排除这些列。在多个表的情况下,排除将应用于所有表。

示例

php artisan iseed users --exclude=id
php artisan iseed users --exclude=id,created_at,updated_at

prerun

可选参数,用于在播种之前分配一个laravel事件名。如果事件监听器返回false,播种将自动失败。您可以通过传递以逗号分隔的数据库名数组以及相应地传递以逗号分隔的事件名数组,为多个表名分配多个预运行。

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

php artisan iseed users --prerun=someEvent

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

php artisan iseed users,groups --prerun=someUserEvent,someGroupEvent

以下示例仅将someGroupEvent分配给groups表播种,在播种之前执行。这里省略了users表的预运行值,因此users表的播种没有分配预运行事件。

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

用法

要为您的users表生成播种文件,只需调用:\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)。

请注意,一些用户在使用大型数据库表导出时遇到了问题(从记录众多的表中填充时出现错误)。问题通过将输入数据分成较小的元素块来插入语句来解决。由于在某些极端情况下,您可能需要更改块大小值,当数据库表有大量列时,iSeed的config.php文件中可配置块大小。

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