olegkravec/unrepeatable

此包的最新版本(1.1.0)没有可用的许可证信息。

控制重复敏感功能的运行

1.1.0 2020-10-08 09:52 UTC

This package is auto-updated.

Last update: 2024-09-08 21:20:52 UTC


README

安装

composer require olegkravec/unrepeatable "^1"

  • 如果需要,您可以在.gitignore中添加文件instances.log
  • 如果您有Laravel项目,可以设置环境变量PROVIDER_STATES_FILE,这将更改实例日志文件的名称。

简介

Unrepeatable - 如果您需要控制/防止您的函数多次运行,则必须在您的项目中强制要求此库。例如,您有Docker,您需要为每次git push执行php artisan db:seed - 但在这种情况下,每个seeder都会执行... Unrepeatable是为了防止这种情况,库会检查已特化的类是否已经运行,并通知您。

使用

案例 #1 - IUnrepeatable

class GenerateDefaultUsersSeeder extends Seeder
{
    use IUnrepeatable; // Just require me
    
    public function run()
    {
        User::factory()->count(10)->create();
    }
}

在这种情况下,GenerateDefaultUsersSeeder将只能运行工厂一次。如果您再次运行seeder,您将在控制台看到

Seeding: Database\Seeders\GenerateDefaultUsersSeeder

Already invoked! Skipping...
Seeded:  Database\Seeders\GenerateDefaultUsersSeeder (0.76ms)

案例 #2 - Unrepeatable

class GenerateDefaultUsersSeeder extends Seeder
{
    use Unrepeatable; // Require me

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        if(!$this->isPreviouslyRunned()) // Check where are you need if this class was already runned
            User::factory()->count(10)->create();
    }
}

在这种情况下,您可以在需要的地方检查之前的运行。

您还可以指定用于检查的敏感功能的关键字,例如

public function run()
    {
        if(!$this->isPreviouslyRunned()) // default check
            User::factory()->count(1000)->create();
            
        if(!$this->isPreviouslyRunned("10k-clients"))
            Clients::factory()->count(10000)->create();
            
        if(!$this->isPreviouslyRunned("100k-of-another-models"))
            AnotherModel::factory()->count(100000)->create();
    }
    

在这种情况下,将在您的类中创建3个带有不同关键字的检查点。