khalyomede/laravel-seed

运行种子文件就像运行迁移文件一样。

v0.2.0 2021-08-28 20:12 UTC

This package is auto-updated.

Last update: 2024-09-29 06:02:43 UTC


README

运行种子文件就像运行迁移文件一样。

Packagist License Packagist Version Maintainability

laravel-seed-showcase-2

摘要

关于

我创建了此包,因为我正在与预先填充数据的表(如性别表、产品类型表等)一起工作。

我发现了一系列包,laravel-seeder,看起来已经被多次分叉,但要么包无法正确安装,要么分叉版本真的很旧。

我决定从头开始,创建这个包,目的是使其尽可能接近官方迁移体验。

在这种方法中,每个种子器都是一个类,就像迁移一样:它定义了“up”和“down”方法,因此您可以运行和回滚您的种子。像迁移一样,文件的顺序由创建时的时间戳确定。

我使用此包的场景是在生产环境中填充我的应用程序,为了自动化此过程,无需单独运行每个种子类,也无需手动操作。

先决条件

  • PHP >= 7.0.0
  • Laravel >= 5.5.0

安装

在您的根项目文件夹中,运行此命令

composer require khalyomede/laravel-seed

对于较旧的Laravel版本,您需要在config/app.php文件的“Providers”键中注册服务提供者,如下所示

'providers' => [
  // ...
  Khalyomede\LaravelSeed\LaravelSeedServiceProvider::class,
]

用法

创建一个新的种子文件

如“关于”部分中所述,种子器是类驱动的。它们定义了“up”和“down”方法,并且是使用命令行种数据库的唯一方式。

使用Artisan命令

要创建一个新的种子文件,请使用以下Artisan命令行

php artisan seed:make InsertPostCategory

这将创建一个新的种子类,位于database/seeders/2020_07_24_094613_insert_post_categories.php。如果您打开该文件,它看起来如下所示

class InsertPostCategories
{
  public function up()
  {
    //
  }

  public function down()
  {
    //
  }
}

指定Eloquent模型

通常,种子器会填充由您的Eloquent模型之一模型化的表。

要指定种子文件通过哪个Eloquent模型填充数据,您可以指定以下--model参数

php artisan seed:make InsertPostCategory --model=PostCategeory

您的种子文件的内容将填充您通常会编写的标准样板代码

use App\PostCategory;

class InsertPostCategories
{
  public function up()
  {
    PostCategory::insert([
      [
        "id" => 1,
      ],
    ]);
  }

  public function down()
  {
    PostCategory::destroy([
      1,
    ]);
  }
}

检查种子状态

如果您需要有关哪些种子已运行或尚未运行的报告,您可以使用以下Artisan命令

php artisan seed:status

这将显示一个表格,每行指定种子状态。

$ php artisan seed:status

+------------------------------------------+---------+
| file                                     | status  |
+------------------------------------------+---------+
| 2020_07_24_094613_insert_post_categories | not ran |
+------------------------------------------+---------+

1 row(s) displayed.

运行种子文件

当您的种子文件准备就绪时,您可以使用此命令运行任何尚未运行的种子文件。

php artisan seed

这也会显示一个表格,总结已成功运行的种子文件。

$ php artisan seed

 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

+------------------------------------------+
| file                                     |
+------------------------------------------+
| 2020_07_24_094613_insert_post_categories |
+------------------------------------------+

1 seed(s) ran.

回滚种子文件

回滚种子文件可能有助于再次测试一切是否正常。有两种回滚种子文件的方式。

回滚所有内容

如果您确信需要删除所有种子文件,您可以使用以下命令

php artisan seed:reset

这将按相反顺序取回每个种子,并运行它们的down()方法。

$ php artisan seed:reset

 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

+------------------------------------------+
| file                                     |
+------------------------------------------+
| 2020_07_24_094613_insert_post_categories |
+------------------------------------------+

1 seed(s) rollbacked.

回滚最后一批种子

当您运行php artisan seed时,它会为此时运行的种子分配一个“批次”号。

让我们假设您正在创建这个博客帖子Web应用程序。您需要填充一些帖子分类,因此您运行一次php artisan seed

此包将把批次号“1”分配给这个第一批种子。

然后,您需要建模作者性别和作者职位(初级或高级)。因此,您创建 GenderPosition 模型,种子文件,并再次运行 php artisan seed

这样就会为这两个额外的种子关联批次号“2”。

到目前为止,我们已经存储了以下内容

+------------------------------------------+--------------+
| file                                     | batch number |
+------------------------------------------+--------------+
| 2020_07_24_094613_insert_post_categories |            1 |
| 2020_07_25_065903_insert_genders         |            2 |
| 2020_07_25_075926_insert_positions       |            2 |
+------------------------------------------+--------------+

因此,当您运行 php artisan seed:rollback 时,这将依次回滚同一批次的 insert_positionsinsert_genders

$ php artisan seed:rollback

 2/2 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

+------------------------------------+
| file                               |
+------------------------------------+
| 2020_07_25_065903_insert_genders   |
| 2020_07_25_075926_insert_positions |
+------------------------------------+

2 seed(s) rollbacked.

然后,如果您再次运行 php artisan seed:rollback,这将单独回滚 insert_post_categories 种子。

$ php artisan seed:rollback

 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%

+-----------------------------------------+
| file                                    |
+-----------------------------------------+
| 2020_07_24_094613_insertpost_categories |
+-----------------------------------------+

1 seed(s) rollbacked.