【问题标题】:How to track which seeders got applied in Laravel?如何跟踪在 Laravel 中应用了哪些播种机?
【发布时间】:2018-06-15 18:39:09
【问题描述】:

使用--class 标志是应用特定种子而不是播种所有内容的明显方法:

php artisan db:seed --class[=CLASS]

有没有办法跟踪迄今为止在 Laravel 中应用了哪些播种器(例如,您可以通过运行 php artisan migrate:status 跟踪应用迁移的方式相同)?

此外,有没有办法应用一个范围的播种机(而不是单独指定每个类,这很麻烦)。

让我想到这一点的是“构建你不会讨厌的 API”一书中的播种器中的这一部分:

28         foreach ($tables as $table) {
29             DB::table($table)->truncate();
30         }
31 
32         $this->call('MerchantTableSeeder');
33         $this->call('PlaceTableSeeder');
34         $this->call('UserTableSeeder');”

这个想法是,每次您想要运行主播种机时,都必须从头开始。但这对我们来说是不切实际的,至少在我们的暂存环境中,我们的 QA/运营人员总是会结合播种数据和手动数据输入。

【问题讨论】:

  • 您能否修改您的播种机以使用updateOrCreate() 而不是create() 并以这种方式解决?如果您需要做的就是确保始终存在某些记录,这是实现它的一种方法。
  • 您还可以创建一个名为seeders 的表,并将其视为数据库迁移。您可以扩展Seeder 类并覆盖__invoke() 函数以检查它之前是否已播种。

标签: php laravel laravel-5 seed laravel-seeding


【解决方案1】:

我相信这个包是为了运行像迁移这样的播种机而创建的:https://github.com/slampenny/SmartSeeder。我认为它会满足您的需求。

关于这方面的文章很少的原因是,大部分时间播种机仅用于手动使用数据初始化数据库,而不是更复杂的部署过程的一部分。

【讨论】:

    【解决方案2】:

    这似乎是种子工作方式过于复杂,或者您的 QA 环境过于复杂。

    也许有不同的发展种子和你所说的分期/质量保证?

    【讨论】:

    • 我们如何填充暂存种子?通过自动转储实时数据?这仍然是同一个问题..我们实际上每个环境都有不同的数据..但它是相同的代码库..最终我们必须在登台时在 dev 中使用相同的种子代码
    • 您可以硬编码种子文件中的 ID,这样您就知道要删除哪个。如果您的关系已建立,那么所有相关数据将在删除时级联,这将很好地清除所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2018-01-23
    相关资源
    最近更新 更多